pengembangan-web-mp-pd.com

Bagaimana cara mengotomatiskan login SSH dengan kata sandi?

Bagaimana cara mengotomatiskan login SSH dengan kata sandi? Saya mengkonfigurasi VM pengujian saya, jadi keamanan yang berat tidak dipertimbangkan. SSH dipilih untuk keamanan yang dapat diterima dengan konfigurasi minimal.

ex)

echo password | ssh [email protected]

Ini tidak berhasil.

Saya ingat saya melakukan ini dengan beberapa trik seseorang membimbing saya, tetapi saya tidak ingat sekarang trik yang saya gunakan ...

462
Eonil

Jangan gunakan kata sandi. Hasilkan kunci SSH tanpa sandi dan Dorong ke VM Anda.

Jika Anda sudah memiliki kunci SSH, Anda dapat melewati langkah ini ... Cukup tekan Enter untuk kunci dan kedua frasa sandi:

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

Salin kunci Anda ke server target:

$ ssh-copy-id [email protected]
[email protected]'s password: 

Sekarang coba masuk ke mesin, dengan ssh '[email protected]', dan check in:

.ssh/authorized_keys

untuk memastikan kami tidak menambahkan kunci tambahan yang tidak Anda harapkan.

Akhirnya periksa masuk ...

$ ssh [email protected]

[email protected]:~$ 

Anda mungkin juga ingin melihat menggunakan ssh-agent jika Anda ingin mencoba menjaga kunci Anda dilindungi dengan frasa sandi.

404
Cakemox
$ Sudo apt-get install sshpass
$ sshpass -p your_password ssh [email protected]
637
weekens

Sementara jawaban yang benar untuk pertanyaan Anda adalah sshpass ( lihat jawaban lain untuk detail ), ada cara yang lebih aman - SSH kunci. Anda hanya tiga langkah mudah jauh dari solusi:

Masukkan perintah berikut untuk mulai membuat rsa keypair :

# ssh-keygen

Ketika pesan 'Masukkan file untuk menyimpan kunci' muncul, biarkan saja nama file kosong dengan menekan Enter.

Ketika terminal meminta Anda untuk memasukkan kata sandi, biarkan kosong juga dan tekan Enter.

Kemudian salin keypair ke server dengan satu perintah sederhana :

# ssh-copy-id [email protected]

anda sekarang dapat masuk tanpa kata sandi :

# ssh [email protected]
74
lzap

Gunakan harapkan:

#!/usr/bin/expect -f
#  ./ssh.exp password 192.168.1.11 id
set pass [lrange $argv 0 0]
set server [lrange $argv 1 1]
set name [lrange $argv 2 2]

spawn ssh [email protected]$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

Contoh:

# ./1.ex password localhost ooshro
spawn ssh [email protected]
[email protected]'s password: 
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
Last login: Tue Mar  1 12:41:12 2011 from localhost
42
ooshro

Saya terkejut tidak ada yang menyebutkan plink dari PuTTY-tools paket di Ubuntu:

plink [email protected] -pw mypass  [cmd]

Ini juga tersedia di Windows dan sintaksisnya sebagian besar kompatibel dengan klien openssh.

17
eadmaster

Ini mungkin tidak berguna bagi Anda, tetapi Anda bisa melakukannya dengan Perl:

\#!/usr/bin/Perl  
use warnings;  
use strict;  

use Net::SSH::Perl;  
my $Host = 'remote.serv.er';  
my $user = 'root';  
my $pass = 'hunter2';  
my $ssh = Net::SSH::Perl->new('$Host');  
$ssh->login('$user', '$pass') or die "Oh noes! $!";
16
James L

Sistem masuk tunggal SSH biasanya dicapai dengan otentikasi kunci publik dan agen otentikasi. Anda dapat dengan mudah menambahkan tes Anda VM kunci ke agen auth yang ada (lihat contoh di bawah). Metode lain seperti gssapi/kerberos ada tetapi lebih kompleks.

sshpass

Dalam situasi di mana password adalah satu-satunya metode otentikasi yang tersedia, sshpass dapat digunakan untuk memasukkan kata sandi secara otomatis. Harap perhatikan bagian PERTIMBANGAN KEAMANAN pada halaman manual . Dalam ketiga opsi, kata sandi terlihat atau disimpan dalam plaintext di beberapa titik :

Pipa anonim (direkomendasikan oleh sshpass)

# Create a pipe
PIPE=$(mktemp -u)
mkfifo -m 600 $PIPE
# Attach it to file descriptior 3
exec 3<>$PIPE
# Delete the directory entry
rm $PIPE
# Write your password in the pipe
 echo 'my_secret_password' >&3
# Connect with sshpass -d
sshpass -d3 ssh [email protected]

# Close the pipe when done
exec 3>&-

Ini cukup rumit di bash, bisa dibilang lebih mudah dengan bahasa pemrograman. Proses lain dapat dilampirkan ke pipa Anda/fd sebelum kata sandi ditulis. Jendela peluang cukup pendek dan terbatas pada proses atau root Anda.

Variabel lingkungan

# Set your password in an environment variable
 export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh [email protected]

Anda dan root dapat membaca variabel lingkungan proses Anda (yaitu kata sandi Anda) saat sshpass sedang berjalan (cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=). Jendela peluang jauh lebih lama tetapi masih terbatas pada proses atau root Anda sendiri, bukan pengguna lain.

Argumen baris perintah (paling tidak aman)

 sshpass -p my_secret_password ssh [email protected]

Ini nyaman tetapi kurang aman seperti yang dijelaskan dalam halaman manual. Argumen baris perintah terlihat oleh semua pengguna (mis. ps -ef | grep sshpass). sshpass mencoba menyembunyikan argumen, tetapi masih ada jendela di mana semua pengguna dapat melihat kata sandi Anda dilewati oleh argumen.

Catatan samping

Tetapkan bash Anda variabel HISTCONTROL ke ignorespace atau ignoreboth dan awali perintah sensitif Anda dengan spasi. Mereka tidak akan disimpan dalam sejarah.


Otentikasi kunci publik SSH

# Generate a key pair
# Do NOT leave the passphrase empty
ssh-keygen
# Copy it to the remote Host (added to .ssh/authorized_keys)
ssh-copy-id [email protected]

Frasa sandi sangat penting. Siapa pun yang mendapatkan file kunci pribadi tidak akan dapat menggunakannya tanpa kata sandi.

Atur agen otentikasi SSH

# Start the agent
eval `ssh-agent`
# Add the identity (private key) to the agent
ssh-add /path/to/private-key
# Enter key passphrase (one time only, while the agent is running)

Terhubung seperti biasa

ssh [email protected]

Keuntungannya adalah kunci pribadi Anda dienkripsi dan Anda hanya perlu memasukkan frasa sandi satu kali (melalui metode input yang lebih aman juga).

12
nrolans

Tentu Anda tidak ingin menggunakan kunci SSH daripada kata sandi? Dengan begitu keduanya aman dan otomatis.

8
Coops

Tergantung pada kebutuhan otomasi Anda, mungkin Ansible akan cocok untuk Anda. Ini dapat dengan baik mengelola hal-hal seperti meminta kata sandi, meminta kata sandi Sudo, berbagai cara mengubah penggunaan, dengan aman menggunakan rahasia terenkripsi (vault).

Jika itu tidak cocok, saya akan menyarankan Harapkan, seperti yang disarankan dalam jawaban lain.

4
Cameron Kerr

Saya lebih suka passhhttps://github.com/clarkwang/passh

sshpass rusak karena desain.

ketika server ssh belum ditambahkan di known_hosts saya, sshpass tidak akan menunjukkan kepada saya pesan untuk menambahkan server ke host saya yang dikenal, passh tidak memiliki masalah ini.

Login ke server jauh:

$ passh -p password ssh [email protected]
1
Badr Elmers