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!STDIN is not a terminal
kesalahan. Namun, kali ini saya tidak dimintai kata sandi; Saya percayaSSH_ASKPASS
bekerja di Automator karena, jika saya membuat fileSSH_ASKPASS
dengan kata sandi yang salah, saya mendapatkanPermission denied, please try again.
kesalahan.macOs >= 10.13
Saya menemukan solusi (terima kasih kepada Daniel Beck untuk memberikan info kunci yang diperlukan untuk ini). Perhatikan bahwa saya hanya menguji ini dengan OS X Lion 10.7.2. Jika ini tidak berhasil untuk Anda, cobalah solusi Daniel.
Pertama kita perlu mengatur
SSH_ASKPASS
variabel lingkungan - nilainya harus menjadi jalur ke program yang mencetak kata sandi ke output standar. Untuk mendapatkan kata sandi dari gantungan kunci, seperti inilah tampilannya (saya menyebutnyaget-ssh-password.sh
):Beberapa hal yang perlu diperhatikan:
Ini mengasumsikan bahwa Anda telah menyimpan kata sandi di gantungan kunci dengan cara yang telah saya jelaskan dalam pertanyaan
Program yang diberikan
SSH_ASKPASS
akan dipanggil tanpa argumen; jadi kami menggunakan variabel lingkungan untuk meneruskan pengguna dan nama host ke sana.Sekarang kita dapat mengatur
SSH_PASSWORD_USER
danSSH_PASSWORD_HOSTNAME
dan menjalankansshpass
untuk masuk ke server kami.Saya membuat skrip lain
ssh-kcpass
,, untuk melakukan ini:Untuk masuk ke server ssh tanpa mengetikkan kata sandi apa pun, Anda hanya perlu menjalankannya
ssh-kcpass user@hostname
.sumber
macOS >= 10.13
Hai, orang-orang yang saya temui di topik ini mencari sesuatu yang lain tapi ... Tidak tahu apakah saya kehilangan sesuatu di sini ... tetapi pendekatan Anda tampaknya aneh bagi saya. mengapa tidak hanya menggunakan otentikasi kunci publik ... Menghasilkan kunci rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Idealnya Anda akan menggunakan sekali ssh-copy-id user @ host dan mengesahkan dengan kata sandi sekali untuk menginstal kunci di server lain, atau menggunakan segala jenis skrip atau alat authomation untuk menyebarkan kunci ke ~ / .ssh / berwenang_kunci pada host lain (untuk pengguna yang ingin Anda masuki) Jika dilakukan dengan perintah secara manual maka Anda harus mengedit /etc/ssh/sshd_config sesuai dan dengan otomatisasi (koki, mungkin) Anda akan mendorong condiga penuh untuk keadaan yang diinginkan.
Kunci yang penting untuk didistribusikan adalah id_rsa.pub, jaga kerahasiaannya
Untuk menggunakan gantungan kunci untuk mengautentikasi ke host dengan mode edit langsung dan otomatis pada mesin Anda, ~ / .ssh / config dan tambahkan:
Tuan rumah * GunakanKeychain ya
Cari info lebih lanjut tentang opsi file konfigurasi ssh berharap semua ini berguna
sumber