Các phiên SSH không tương tác
Nếu bạn không cần phải có phiên tương tác trên máy chủ từ xa, bạn có thể thực thi sshtrong môi trường mà không cần tty, ví dụ như một phần của hành động Run Shell Script trong Automator .
Bạn cần tạo một chương trình mà khi được gọi sẽ in mật khẩu thành tiêu chuẩn, ví dụ tập lệnh bash sau đây bạn cần để thực thi bằng cách sử dụng chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Sau đó, đặt SSH_ASKPASSbiến môi trường cho đường dẫn đến chương trình này, rồi chạy sshtrong hành động Automator, như sau:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Khi không có tty, nhưng SSH_ASKPASSvà DISPLAY(đối với X11, được đặt mặc định) được đặt, SSH sẽ thực thi chương trình được chỉ định bởi SSH_ASKPASSvà sử dụng đầu ra của nó làm mật khẩu. Điều này được dự định sẽ được sử dụng trong môi trường đồ họa, để một cửa sổ có thể bật lên hỏi mật khẩu của bạn. Trong trường hợp này, chúng tôi chỉ bỏ qua cửa sổ, trả lại mật khẩu từ chương trình của chúng tôi. securityThay vào đó, bạn có thể sử dụng để đọc từ móc khóa của mình, như thế này:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(trên sshdòng lệnh) là lệnh được thực thi khi sshđã đăng nhập và đầu ra của nó được in trong Automator. Tất nhiên, bạn có thể chuyển hướng nó đến một tệp để ghi nhật ký đầu ra của chương trình bạn bắt đầu.
Phiên SSH tương tác bằng cách sử dụng sshpass
Tôi đã tải xuống, biên dịch và cài đặt sshpassvà nó hoạt động hoàn hảo. Đây là những gì tôi đã làm:
- Nhận các công cụ dành cho nhà phát triển của Apple
- Tải xuống và mở
sshpass-1.05.tar.gz
- Mở một vỏ vào thư mục
sshpass-1.05
- Chạy
./configure
- Chạy
make
- Chạy
make install(bạn có thể cần sudocho nó)
Bây giờ chương trình được cài đặt để /usr/local/bin/sshpass. Thực hiện bằng cách sử dụng một dòng như sau:
sshpass -pYourPassword ssh username@hostname
Bạn có thể đọc mật khẩu securityngay trước khi làm điều đó và sử dụng nó như thế này:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Bao bọc điều này trong một hàm shell và bạn chỉ có thể gõ ví dụ ssh-yourhostnameđể kết nối, tự động lấy và nhập mật khẩu.
STDIN is not a terminal. 2) Đối với các phiên tương tác vớisshpass,-ptùy chọn dường như không làm gì cả. Nhưng chạysshpasstrong khiSSH_ASKPASSđược thiết lập không hoạt động!