Đâ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_PIDvà echo $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 đề
Vì 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ụnguseradd -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ácdiff /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ự chodiff /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.1328Khô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 -sCá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ụnggreptrong/etcvà/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:
- Trường hợp này được
ssh-agentsinh ra ở đâu và như thế nào , ai ban hành lệnh? - 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?
~/.bashrcđó sau đó.