Đâ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-agent
quy 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 exit
ing: đăng nhập và đăng xuất nhiều lần khiến cho một loạt các ssh-agent
quy 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 ~/.bashrc
khiế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_PID
phải được xác định vì ssh-agent
chươ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_PID
và 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 -k
cố đọc PID của nó từ biến môi trường không được đặt.
Vấn đề
Vì ssh-agent
khô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 vi
chuỗi ssh
bê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 systemd
dịch vụ có liên quan , nhưng chỉ tìm thấy ssh.service
, WantedBy=multi-user.target
và 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/pi
thư 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-agent
vẫ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-agent
và thay thế nó bằng giả mạo cài đặt quyền / người dùng / nhóm quyền, chạy source ~/.bashrc
lại, sau đó in LOG
tệ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
dummy
bằng cách sử dụnguseradd -m dummy
và đă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/.bashrc
chươ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_SOCK
khô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-agent
quá 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ụnggrep
trong/etc
và/lib
khô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/X11
thư 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-agent
sinh 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 đó.