リモートサーバーがあります。パスワードを入力せずに公開鍵を利用してSSHで接続しようとしますが、リモートシステムが公開鍵認証を拒否します。
それでは、最良のアプローチは何ですか?試してみてはいかがでしょうかsshpass
?
答え1
編集する
私が参照として使用したリンクでより多くのオプションを見つけることができます。
インストールした場合は、sshpass
SSH接続を自動化して各コンピュータにパスワードを入力する必要はありません。
SSHPASS='password'
sshpass -e your commands here
1. インストールsshpass
ssh
これはパスワードをコマンドライン引数として渡すことができる素晴らしい小さなプログラムです。明らかにこれは非常に安全な解決策ではないので、「セキュリティ上の考慮事項」セクションを読んでお勧めしますman sshpass
。
とにかくディストリビューションリポジトリで使用できます。 Debian ベースのシステムでは、次のコマンドを使用してインストールできます。
sudo apt-get install sshpass
RedHatベースのマシンがないので確認できませんが、検索してみるとわかる限りここ、Fedoraにインストールできる必要があります。
sudo yum install sshpass
インストールが完了したら、簡単に実行してください。
SSHPASS='password'
sshpass -e your commands
この-e
オプションはsshpass
変数からパスワードを取得するように指示しますSSHPASS
。これはオプションに引数として提供するよりも安全です-p
。
重要:
接続しようとしているサーバーが不明な場合、または公開鍵がコンピュータに保存されていない場合、この操作は失敗します。これがうまくいかない場合は、リモートシステムに一度(ssh
または)接続して公開鍵を受け入れます。scp
引用する
答え2
sshpass
これは、システムが唯一のユーザーである場合に機能します。しかしこれはかなり非常に悪い考えである。誰もがあなたのコンピュータにシェルアクセスを持っている場合、あなたのパスワードを得ることができます。
一度公開鍵は交換できません。パスワードを含むファイルを保護するexpect
必要があります。exp
sudoまたはrootアクセス権を持つすべてのユーザーがハッキングできるように、ハードドライブに保存されます。しかし、少なくともそれは比較されますsshpass
。
答え3
他の回答ですでに説明したように使用しますsshpass
が、read
パスワードを一時環境変数に保存するコマンドと組み合わせます。これにより、私のパスワードはどこにもプレーンテキストとして記録されません。これは私が使用する1行のコマンドです。
read -s PASS; sshpass -p $PASS ssh <user>@<host adress>
その後、パスワードを入力する必要があり(画面には何も表示されません)、Enterキーを押すと接続が開きます。