Ai đang bắt đầu đại lý ssh của tôi và tại sao nó không kết thúc đúng cách?


9

Đây là một vấn đề tôi đã gặp phải trong một thời gian dài, nhưng mỗi lần tôi cố gắng tìm ra điều gì đó tôi bị lạc, vì vậy tôi nhận ra rằng tôi nên hỏi ở đây, nơi mà ai đó có kinh nghiệm hơn có thể giúp tôi.

Lý lịch

Raspberry Pi của tôi đang chạy Raspbian Jessie và tôi thường xuyên sử dụng SSH để đăng nhập vào nó và thực hiện các lệnh từ xa. Trong các phiên SSH đầu tiên của tôi, tôi nhận thấy rằng một ssh-agentquy trình được sinh ra trên RPi mỗi lần tôi đăng nhập, nhưng không bao giờ bị giết khi exiting: đăng nhập và đăng xuất nhiều lần khiến cho một loạt các ssh-agentquy trình được sinh ra chỉ để không bị treo. Loay hoay và đọc các trang người đàn ông và câu trả lời ở đây và gần đây tôi đã hiểu mục đích của nó ssh-agent, và tôi cũng biết rằng nó thường bị giết khi đăng xuất, vì vậy tôi bắt đầu tự hỏi tại sao nó không như vậy. Hơn nữa, tôi nhận thấy rằng việc ban hành source ~/.bashrckhiến một trường hợp khác ssh-agentđược sinh ra. Tôi đọc trên trang người đàn ông tương đốirằng biến môi trường SSH_AGENT_PIDphải được xác định vì ssh-agentchương trình nên được khởi động bên trong evalđể thực thi đầu ra của nó và xác định các biến đó, sau đó được sử dụng bởi các lệnh liên quan đến SSH khác, bao gồm ssh-agent -k(để giết tác nhân liên quan đến phiên hiện tại), vì vậy tôi chạy echo $SSH_AGENT_PIDecho $SSH_AUTH_SOCK, nhưng cả hai đều trống rỗng. Tôi chợt nhận ra: có lẽ quá trình không bị giết khi đăng xuất vì ssh-agent -kcố đọc PID của nó từ biến môi trường không được đặt.

Vấn đề

ssh-agentkhông bị giết khi đăng xuất và điều này chắc chắn xảy ra do các biến môi trường cần thiết không được đặt, nên nó chỉ có thể có một ý nghĩa: bất cứ ai gọi ssh-agentđăng nhập có thể không thực hiện theo cách thích hợp (sẽ là như vậy eval "$(ssh-agent -s)") . Vì vậy, tôi nghĩ: tốt, vấn đề là gì? Tôi sẽ chỉ tìm bất kỳ tập tin cấu hình, dịch vụ hoặc tập lệnh đăng nhập nào được thực thi để khởi động tác nhân và tự sửa nó! Nó có thể ở đâu trên trái đất?

Những gì tôi đã thử

Vì tôi nhận thấy rằng an ssh-agentđược sinh ra mỗi lần tôi gọi source ~/.bashrc, đây là tệp đầu tiên tôi kiểm tra, nhưng không có gì ở đó thậm chí còn tham chiếu từ xa bất cứ thứ gì liên quan đến SSH. Tôi tiếp tục tìm kiếm bằng cách sử dụng vichuỗi sshbên trong tất cả các tệp sau, nhưng không tìm thấy gì :

~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment

Có một số tập tin có thể được tham gia source ~/.bashrc? Tôi thực sự không biết.

Sau đó, tôi đã tìm kiếm các systemddịch vụ có liên quan , nhưng chỉ tìm thấy ssh.service, WantedBy=multi-user.targetvà do đó không chạy được khi đăng nhập (và tốt, điều đó là hiển nhiên vì đây là trình nền máy chủ SSH).

Tôi cũng đã thử di chuyển từng tệp trong /home/pithư mục của mình sang thư mục tạm thời và đăng xuất và đăng nhập lại, nhưng ssh-agentvẫn sinh ra.

Cuối cùng, tôi cũng đã bắn phát súng cuối cùng tôi có trong buồng: Tôi chạy find / -name 'ssh-agent'bằng root, chỉ in /usr/bin/ssh-agent, một tệp thực thi, vì vậy tôi đã tạo ra một tệp thực thi giả mà về cơ bản chỉ ghi nhật ký lệnh cha :

#! /bin/bash
ps -o args= $PPID        > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG

Tôi đã đổi tên thật /usr/bin/ssh-agentvà thay thế nó bằng giả mạo cài đặt quyền / người dùng / nhóm quyền, chạy source ~/.bashrclại, sau đó in LOGtệp:

-bash
-bash

Không một manh mối về những gì đang xảy ra.

Một số chi tiết

Tôi đang thêm một số chi tiết, tôi không biết liệu chúng có thể hữu ích hay không, nhưng bạn biết ... an toàn hơn là xin lỗi.

  • Đây là của tôi .bashrc.

  • Tôi đã tạo một người dùng mới có tên dummybằng cách sử dụng useradd -m dummyvà đăng nhập vào nó không bắt đầu bất kỳssh-agent (tôi cảm thấy như điều này có thể có nghĩa gì đó). Các diff /home/pi/.bashrc /home/dummy/.bashrcchương trình về cơ bản không có gì (chỉ là một bình luận tôi đã thực hiện), tương tự cho diff /home/pi/.profile /home/dummy/.profile.

  • Ổ cắm tác nhân được tạo mà không có vấn đề mặc dù SSH_AUTH_SOCKkhông được đặt:

    pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/
    total 0
    srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
    

    Không chắc chắn tại sao, nhưng số trên tên tệp ổ cắm luôn luôn là số ngay trước mã PID của ssh-agentquá trình.

  • Đoạn trích từ htop:

     PID  USER  PRI  NI  VIRT   RES   SHR  S  Command
       1  root   20   0  5472  3900  2728  S  /sbin/init
    1329  pi     20   0  3696   224    16  S  └─ ssh-agent -s
    
  • Các gói đã cài đặt phù hợp ssh:

    pi:~$ apt list --installed | grep ssh
    libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed]
    libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic]
    libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic]
    openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed]
    sshpass/oldstable,now 1.05-1 armhf [installed]
    
  • Tìm kiếm ssh-agent -sđệ quy sử dụng greptrong /etc/libkhông mang lại kết quả.

  • Tôi không cài đặt môi trường máy tính để bàn, nhưng tôi có một /etc/X11thư mục chứa một số tệp cấu hình trong đó. Tôi đã thử đổi tên thư mục thành một cái gì đó khác và khởi động lại chỉ trong trường hợp, nhưng quá trình vẫn được sinh ra, vì vậy rõ ràng điều đó không liên quan gì đến việc này.


Phần kết luận

Bây giờ, để làm cho nó đơn giản nhất có thể, tôi chỉ có hai câu hỏi:

  1. Trường hợp này được ssh-agentsinh ra ở đâu và như thế nào , ai ban hành lệnh?
  2. Tại sao nó không được gọi theo cách thích hợp, mà không đặt các biến môi trường cần thiết, và do đó để quá trình treo ở đó vô thời hạn?

Tôi tự hỏi những gì bạn có trong ~/.bashrcđó sau đó.
ilkkachu

@ilkkachu tốt, bạn đến đây ...
Marco Bonelli

Câu trả lời:


1

Tôi biết một vài lý do có thể:

  • nếu bạn đang sử dụng libpam-ssh, nó có thể tự động khởi động một tác nhân SSH cho bạn như là một phần của quá trình khởi động phiên và thậm chí tự động tải các khóa của bạn nếu chúng không có cụm mật khẩu hoặc cụm mật khẩu của chúng giống như mật khẩu đăng nhập của bạn.

  • nếu bạn đang sử dụng gpg-agent, nó có thể tùy chọn thực hiện nhiệm vụ ssh-agentquá. Việc tắt của nó được xử lý khác nhau, do đó sẽ chỉ có SSH_AUTH_SOCKbiến môi trường, không phải là biếnSSH_AGENT_PID

  • nếu bạn có tác nhân SSH (ví dụ: PuTTY's Pagete) đang chạy trên máy trạm của bạn và tạo kết nối SSH với tính năng chuyển tiếp tác nhân (và điều khiển từ xa sshdcho phép), trên máy chủ từ xa, bạn sẽ chỉ nhìn thấy SSH_AUTH_SOCKmà không có SSH_AGENT_PID... vì ổ cắm tác nhân đi đến sshdđường hầm nào nó trở lại tác nhân SSH của máy trạm cục bộ của bạn.


1
Cảm ơn bạn đã gợi ý, nhưng tiếc là không có lựa chọn nào trong số đó áp dụng cho tôi. Tôi không có libpam-ssh; cả hai SSH_AGENT_PIDSSH_AUTH_SOCKkhông được đặt (dù sao thì ổ cắm cũng có mặt); Tôi không sử dụng gpg-agentvà không bật chuyển tiếp đại lý trên PuTTY. Tôi thực sự đã lạc lối: \
Marco Bonelli
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.