Sesi SSH non-interaktif
Jika Anda tidak perlu memiliki sesi interaktif di server jauh, Anda dapat mengeksekusi ssh
di lingkungan tanpa tty
, misalnya sebagai bagian dari tindakan Run Shell Script di Automator .
Anda perlu membuat program yang ketika dipanggil mencetak kata sandi ke standar keluar, misalnya skrip bash berikut yang Anda perlukan agar dapat dieksekusi menggunakan chmod +x pwd.sh
:
#!/usr/bin/env bash
echo "password"
Kemudian, tetapkan SSH_ASKPASS
variabel lingkungan ke jalur ke program ini, dan kemudian jalankan ssh
dalam tindakan Automator, seperti ini:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Ketika tidak ada tty
, tetapi SSH_ASKPASS
dan DISPLAY
(untuk X11, ditetapkan secara default) diatur, SSH mengeksekusi program yang ditentukan oleh SSH_ASKPASS
dan menggunakan outputnya sebagai kata sandi. Ini dimaksudkan untuk digunakan dalam lingkungan grafis, sehingga sebuah jendela dapat muncul menanyakan kata sandi Anda. Dalam hal ini, kami hanya melewatkan jendela, mengembalikan kata sandi dari program kami. Anda dapat menggunakannya security
untuk membaca dari gantungan kunci Anda, seperti ini:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls
(pada ssh
baris perintah) adalah perintah yang dieksekusi ketika ssh
telah masuk, dan hasilnya dicetak dalam Automator. Anda tentu saja dapat mengarahkannya ke file untuk mencatat keluaran dari program yang Anda mulai.
Sesi SSH interaktif menggunakan sshpass
Saya mengunduh, mengompilasi, dan menginstal sshpass
dan bekerja dengan sempurna. Inilah yang saya lakukan:
- Dapatkan alat pengembang Apple
- Unduh dan buka
sshpass-1.05.tar.gz
- Buka shell ke direktori
sshpass-1.05
- Lari
./configure
- Lari
make
- Jalankan
make install
(Anda mungkin perlu sudo
untuk itu)
Sekarang program diinstal ke /usr/local/bin/sshpass
. Jalankan menggunakan garis seperti berikut:
sshpass -pYourPassword ssh username@hostname
Anda dapat membaca kata sandi security
tepat sebelum melakukannya, dan menggunakannya seperti ini:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Bungkus ini dalam fungsi shell dan Anda bisa mengetik misalnya ssh-yourhostname
untuk menghubungkan, setelah itu mengambil dan memasukkan kata sandi secara otomatis.
STDIN is not a terminal
. 2) Untuk sesi interaktif dengansshpass
,-p
opsi tampaknya tidak melakukan apa pun. Tetapi menjalankansshpass
sementaraSSH_ASKPASS
diatur tidak bekerja!