解決策 1:
いいえ、openssh 組み込みメカニズムを使用して ssh 認証用の非対話的な方法でコマンド ラインでパスワードを指定または提供する方法はありません。少なくとも私が知っているものではありません。パスワードを期待スクリプトにハードコードすることもできますが、それも良い解決策ではありません。
Michael が述べたように、パスワードなしの認証には鍵ペアを使用することをお勧めします。結局のところ、秘密鍵はファイル内のかなり大きなパスワードです。
解決策 2:
一連のコメントを避けるには:はい、これは安全ではありません (間違いなく安全ではありません)。隔離されたネットワーク上のラボの状況、または実稼働サーバーまたは潜在的に実稼働サーバーが完全にリセット/フォーマットされていない同様の状況でのみ実行することを強くお勧めします。
私の 2950 スイッチは秘密鍵/公開鍵をサポートしていないと思うので、これを設定したかったので、いつかその知識を得たいと思っていますが、まだそこにはいません。
エイリアスと sshpass を使用すると、これを実現できます。
<オール>私のエイリアスの例:
alias ssc='sshpass -pcisco ssh'
「cisco」はパスワードです。 -p とパスワードの間にスペースがないことに注意してください。
使用法は次のとおりです (質問を参照):
ssc server1
注:これは、検索エンジンを使用している場合にのみ、タイトルの質問に回答します。質問の例のようなサーバーを使用している場合は、この回答ではなく、秘密鍵と公開鍵のペアを使用する必要があります
解決策 3:
はい、前述のとおり、パスワードを単純に保存する方法はありません。認証にはsshキーを使用することをお勧めします。
まず、キーを生成してください:
ssh-keygen
次に、キーをサーバー/デスクトップにコピーします:
ssh-copy-id -i .ssh/id_rsa.pub [email protected]:
それで全部です。二度とパスワードを求められることはありません。
また、一般的にパスワード認証を削除することをお勧めしますが、それはあなた次第です.
解決策 4:
ssh でこれを行う方法はありません。これは、可能な限り安全ではありません。
ダニラが言ったように、expect スクリプトを使用できますが、私は気にしません。
何を達成しようとしているのだろうか?あるサーバーから別のサーバーにホップしますか?この場合、ワークステーションで ssh-agent をセットアップして使用し、ターゲット ホストでエージェント転送を有効にします。このようにして、秘密鍵をコピーすることなく、資格情報交換をローカル エージェントにルーティングできます。
解決策 5:
~/.local/bin
のこのスクリプトを使用します ディレクトリ
#!/usr/bin/bash
ORIG_SSH=/usr/bin/ssh
HOST=$1
SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
export SSHPASS
sshpass -e $ORIG_SSH [email protected]
else
$ORIG_SSH [email protected]
fi
これにより、パスフレーズを #PS <password>
として指定できます .ssh/config
で ファイル。
しかし、誰もが言うように、ssh-keys
を使用する方が良いです。 ssh-agent
で 可能な場合