SSHにstdinからパスワードを読み取らせるにはどうすればよいですか。デフォルトでは行われません。
ほとんどのSSHクライアントではできません。 Paramiko for Pythonのように、SSH APIを使用して回避できます。すべてのセキュリティポリシーを無効にしないように注意してください。
これに基づいて post 実行できます:
SSH_ASKPASSを使用してsshセッションを開くコマンドを作成します( man ssh でSSH_ASKPASSを検索します)
$ cat > ssh_session <<EOF
export SSH_ASKPASS="/path/to/script_returning_pass"
setsid ssh "your_user"@"your_Host"
EOF
注:sshがttyで尋ねようとしないようにするために setsid を使用します
パスワードを返すスクリプトを作成します(注echo "echo)
$ echo "echo your_ssh_password" > /path/to/script_returning_pass
それらを実行可能にする
$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass
それを試してみてください
$ ./ssh_session
SshはSecure Shellの略であり、ユーザー、ホスト、パスワードをプレーンテキストファイルに保存すると、ツールが誤解され、セキュリティギャップが生じる可能性があることに注意してください。
sshpass を使用できます。これは、たとえば公式の debianリポジトリ にあります。例:
$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
蒸留 この答え は単純で一般的なスクリプトを残します:
#!/bin/bash
[[ $1 =~ password: ]] && cat || SSH_ASKPASS="$0" DISPLAY=nothing:0 exec setsid "$@"
pass
として保存し、chmod +x pass
を実行して、次のように使用します。
$ echo mypass | pass ssh user@Host ...
最初の引数にpassword:
が含まれている場合は、その入力を出力(cat
)に渡します。それ以外の場合は、SSH_ASKPASS
プログラムとして設定された後に提示されたものを起動します。
ssh
がSSH_ASKPASS
AND DISPLAY
セットの両方に遭遇すると、SSH_ASKPASS
によって参照されるプログラムを起動し、プロンプトuser@Host's password:
を渡します。
古い投稿が復活しています...
まったく同じ問題の解決策を探しているときに私はこれを見つけました、私は何かを見つけました、そして誰かがいつかそれが役に立つと思うことを望みます:
SSH_ASKPASS
変数(export SSH_ASKPASS=/usr/bin/ssh-askpass
)setsid ssh user@Host
)これは、安全であるように十分に単純に見えますが、まだチェックしていません(ローカルの安全なコンテキストで使用するだけです)。
ほら。
FreeBSDメーリングリストexpect ライブラリを推奨します。
プログラムによるsshログインが必要な場合は、実際には public key loginsを使用 である必要があります。ただし、外部ライブラリを使用してパスワードを渡す場合と比べて、明らかにこの方法ではセキュリティホールがはるかに少なくなります。 stdin
。
この機能が必要な理由はわかりませんが、ssh-keygenでこの動作を実現できるようです。
コンピューターにRSA秘密鍵を、サーバーにRSA公開鍵を設定することにより、パスワードを使用せずにサーバーにログインできます。
より良いsshpass
の代替案は次のとおりです: https://github.com/clarkwang/passh
sshpass
で問題が発生しました。sshサーバーがknown_hosts
に追加されていない場合、sshpass
はメッセージを表示しません。passh
にはこの問題はありません。