パスワードを使用してSSHログインを自動化する方法 テストVMを構成しているので、強力なセキュリティは考慮されません。最小限の構成で許容可能なセキュリティを確保するためにSSHが選択されました。
例)
echo password | ssh id@server
これは機能しません。
誰かが私を誘導したいくつかのトリックでこれをやったことを覚えていますが、今使ったトリックを思い出せません...
パスワードを使用してSSHログインを自動化する方法 テストVMを構成しているので、強力なセキュリティは考慮されません。最小限の構成で許容可能なセキュリティを確保するためにSSHが選択されました。
例)
echo password | ssh id@server
これは機能しません。
誰かが私を誘導したいくつかのトリックでこれをやったことを覚えていますが、今使ったトリックを思い出せません...
回答:
パスワードを使用しないでください。パスフレーズのないSSHキーを生成し、VMにプッシュします。
すでにSSHキーをお持ちの場合は、この手順をスキップできます… Enterキーと両方のパスフレーズを押してください:
$ 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.
キーをターゲットサーバーにコピーします。
$ ssh-copy-id id@server
id@server's password:
次に、を使用してマシンにログインしてssh 'id@server'
、チェックインします。
.ssh/authorized_keys
予期しないキーが追加されていないことを確認してください。
最後にログインを確認してください…
$ ssh id@server
id@server:~$
またssh-agent
、パスフレーズでキーを保護したい場合は、使用を検討することもできます。
$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname
ssh
使用する前にプレーンを1回実行する必要がありますsshpass
history -r
コマンドを実行すると、履歴を消去できます。良い点。
質問に対する正しい答えはsshkeyですが、より安全な方法があります-SSHキー。ソリューションからわずか3つの簡単な手順です。
rsaキーペアを生成します。
# ssh-keygen
次に、1つの簡単なコマンドでサーバーにコピーします。
# ssh-copy-id userid@hostname
パスワードなしでログインできます:
# ssh userid@hostname
ssh-copy-id
。
ssh-copy-id -i ~/.ssh/tatu-key-ecdsa user@host
expectを使用します。
#!/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 $name@$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact
例:
# ./1.ex password localhost ooshro
spawn ssh ooshro@localhost
ooshro@localhost'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
-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null
known_hostsファイルにマシンを受け入れる避けるためにもsshコマンドのために
これはあなたにとって何の役にも立たないかもしれませんが、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! $!";
SSHシングルサインオンは通常、公開キー認証と認証エージェントを使用して実現されます。テストVMキーを既存の認証エージェントに簡単に追加できます(以下の例を参照)。gssapi / kerberosなどの他のメソッドは存在しますが、より複雑です。
password
利用可能な認証方法が唯一の状況では、sshpassを使用してパスワードを自動的に入力できます。マニュアルページの「セキュリティに関する考慮事項」セクションに特に注意してください。3つのオプションすべてで、パスワードはある時点で表示されるか、プレーンテキストで保存されます。
# 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 user@host
# Close the pipe when done
exec 3>&-
bashでは非常に扱いにくく、プログラミング言語では間違いなく簡単です。パスワードが書き込まれる前に、別のプロセスがパイプ/ fdにアタッチされる可能性があります。機会の窓は非常に短く、プロセスまたはルートに限定されます。
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
あなたとrootは、sshpassの実行中(cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
)にプロセスの環境変数(つまりパスワード)を読み取ることができます。機会の窓はずっと長くなりますが、それでも他のユーザーではなく、自分のプロセスまたはルートに制限されます。
sshpass -p my_secret_password ssh user@host
これは便利ですが、マニュアルページで説明されているように安全性は低くなります。コマンドライン引数は、すべてのユーザーに表示されます(例:)ps -ef | grep sshpass
。sshpassは引数を隠そうとしますが、すべてのユーザーが引数で渡されたパスワードを見ることができるウィンドウがまだあります。
bash HISTCONTROL変数をignorespace
orに設定し、ignoreboth
機密コマンドの前にスペースを付けます。それらは履歴に保存されません。
# 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 user@host
パスフレーズは非常に重要です。なんらかの方法で秘密鍵ファイルを取得することは、パスフレーズなしでは使用できません。
# 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)
通常通り接続する
ssh user@host
利点は、秘密鍵が暗号化され、パスフレーズを1回入力するだけで済むことです(より安全な入力方法でも)。
パスワードではなくSSHキーを使用したくないのですか?そのように、それは安全かつ自動の両方です。