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 ssh
trong 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_ASKPASS
biến môi trường cho đường dẫn đến chương trình này, rồi chạy ssh
trong 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_ASKPASS
và 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_ASKPASS
và 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. security
Thay 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 ssh
dò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 sshpass
và 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 sudo
cho 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 security
ngay 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
,-p
tùy chọn dường như không làm gì cả. Nhưng chạysshpass
trong khiSSH_ASKPASS
được thiết lập không hoạt động!