Linuxシステムから別のLinuxシステムに接続し、特定のコマンドの出力を取得するにはsshコマンドが必要ですが、SSHキーの保存、キャンセルのプロンプトなしで接続を強制する必要があります。
これまでコマンドを使用して接続して出力を取得しましたが、公開SSHキーを保存するように求められました。
value=$(ssh -q -P $passwd $userid@$box "head -1 /users/SB1.txt")
答え1
ホスト鍵検証を無効にし、次のSSHオプションが必要です。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
SSH 構成ファイルの代わりにコマンドに追加する場合は、以下を使用します。
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
コマンド例の後に-q
。
答え2
準備(SSHクライアントユーザーとボックス内):公開鍵認証用の鍵ペアの作成
ssh-keygen -N '' -t rsa -f ~/.ssh/id_rsa
$userid
準備(手動/対話型、ユーザー/サーバーごとに1回):公開鍵認証を設定し、要求せずにホスト鍵を受け入れます(パスワードを一度尋ねます)。
ssh-copy-id -o "StrictHostKeyChecking = no" $userid@$box
その後、対話なしでリモートコマンドを実行します。
value=$(ssh -o 'BatchMode = yes' $userid@$box "head -1 /users/SB1.txt")
これで、SSHクライアントはサーバーのSSHホストキーを実行したときに追加されたことを知っていますssh-copy-id
。
答え3
ここには2つの部分があります。 (質問が示すように)パスワード認証を使用する場合は、パスワードプロンプトなしで接続するにはsshpassプログラムを使用する必要があります。ほとんどのLinuxディストリビューションにあるパッケージマネージャを介してインストールできます。マニュアルページから:
sshpassは、「キーボード対話型」パスワード認証と呼ばれるモードを使用しますが、非対話型モードでsshを実行するように設計されたユーティリティです。
もちろん、SSHキーを設定する方が良いですが、SSHパスワードを使用しない限り、他のセキュアチャネルがなければ、最初にリモートシステムの公開鍵を取得することは不可能です。キーをそこに入れるにはパスワードを使用する必要があることを考慮すると、ワンタイム使用の場合はパスワードを使用して操作を実行することもできます。
2番目の部分は、最初にキーを保存するように求められないように、StrictHostKeyCheckingに適切な値を設定する必要があることです。通常、StrictHostKeyChecking = accept-newを使用します。その後、sshはメッセージを表示せずに、ユーザーの既知のホストファイルに新しいホストキーを自動的に追加します。
したがって、一般的なコマンドは次のようになります。
value=$(sshpass -p$passwd ssh -q -oStrictHostKeyChecking=accept-new $userid@$box "head -1 /users/SB1.txt")
答え4
君は必ずそうしなければならないいいえホストキーを操作するのは悪い考えです。
あなたがする必要があるのは、ssh-keygen(1)(「man ssh-keygen」を参照)を活用し、公開鍵と秘密鍵を生成することです。パスワードプロンプトは必要ないため、パスワードを入力する必要はありません。ホームディレクトリ(〜/ .ssh)の.sshディレクトリに結果を見つけることができます。
次へ: ~/.ssh/id_rsa.pub の内容をリモートサーバーの ~/.ssh/authorized_keys ファイルに追加します (直接作成する必要がある場合があります)。
最後に、ユーザーがリモートキーを使用して認証できることをSSH(sshd)に通知します。これはデフォルト値かもしれませんが、すべてのLinuxディストリビューションについて完全にはわかりません。 PubkeyAuthenticationオプションを見つけて有効になっていることを確認してください。
したがって、ここで発生する状況は次のとおりです。自分自身を認証するためにまだ非常に強力な認証(〜/ .ssh / id_rsaに格納されている外部キー)を使用しますが、認証を提供していないため、パスワードは要求されません。ログインプロセスを「即時」にします。
ただし、セキュリティを犠牲にすることなく(特定のアカウントを使用しているすべての人がリモートサーバーにログインできるため、コンピュータでのみ発生するため、これは明らかです)。
しかし、繰り返しますが、StrictHostKeyCheckingを操作することは悪いアイデアで、完全に不要です。