シェルスクリプトでSSHパスワードプロンプトを無視する

シェルスクリプトでSSHパスワードプロンプトを無視する

公開鍵認証を使用してサーバーにSSHで接続し、そのコンピュータでコマンドを実行するシェルスクリプトがあります。これは、ユーザーがサーバーに公開鍵をインストールしたコンピューターで正常に機能します。ユーザーが認証キーを設定していないシステムでこのスクリプトを実行すると、スクリプトはパスワードプロンプトで中断されます。私のスクリプトは引き続き実行され、プロンプトで停止しないようにしたいです。プロンプトをバイパスする方法は?私はMac OSXを使用しています。サーバーはOSXも実行します。

答え1

これを行う1つの方法は、-o PasswordAuthentication=NoSSHコマンドに次のように指定することです。

ssh -o PasswordAuthentication=no user@server

これにより、SSHクライアントがサーバーと通信する必要がある認証オプションのリストからPasswordAuthenticationが削除され、パスワードプロンプトを続行できなくなります。これにより、PubkeyAuthentication(RHostsRSAAuthenticationなど)以外の他の認証メカニズムも機能できます。 pubkey認証を使用したい場合...

ssh -o PreferredAuthentications=publickey user@server

答え2

SSHサーバーに自動的にログインするパスワードを提供するシェルスクリプトを作成できます。

しかし、あなたはそうしなければなりません。予想されるこれはスクリプト用にインストールされたパッケージです。

Redhatでは、Expectパッケージはデフォルトです。ただし、Ubuntuでは別途インストールする必要があります。

コマンドを使用して、次のことを確認できます。

$ rpm -qa | grep expect レッドハットの場合

$ dpkg -l expectUbuntuの場合

次のようにSSHサーバーのパスワードを提供するシェルスクリプトを作成できます。

#!/usr/bin/expect
spawn ssh user@ssh-server-ip   
expect "user@ssh-server-ip's password:"    
send "password\r"       
interact    

このスクリプトはあなたのためのトリックを行います。

関連情報