SSH 鍵の保管または取り消しオプションのメッセージを要求せずに SSH コマンド

SSH 鍵の保管または取り消しオプションのメッセージを要求せずに SSH コマンド

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を操作することは悪いアイデアで、完全に不要です。

関連情報