SSHを介して1行で別のコンピューターに接続するにはどうすればよいですか?もしそうするならssh host@IP
、2行目にパスワードを入力する必要があります。私は次のようなことができると考えていました:ssh host@IP | echo password
、それはパスワードを要求する前にパスワードを入力します。
ssh
stdinからパスワードを読み取れば機能しますecho password | ssh host@IP
が、通常、SSHは端末から直接読み取ろうとします。
SSHを介して1行で別のコンピューターに接続するにはどうすればよいですか?もしそうするならssh host@IP
、2行目にパスワードを入力する必要があります。私は次のようなことができると考えていました:ssh host@IP | echo password
、それはパスワードを要求する前にパスワードを入力します。
ssh
stdinからパスワードを読み取れば機能しますecho password | ssh host@IP
が、通常、SSHは端末から直接読み取ろうとします。
回答:
パスワードは非常に安全ではないため、コマンドラインにパスワードを入力するのではなく、SSHキーを使用して認証する必要があります。
これが機能する方法は、SSHキーをセットアップしたら、コマンドを発行するだけです。
ssh user@host
別のものを入力しなくても、自動的にログインされます。
これは、パスワードベースの認証(パスワードの入力)を介してリモートサーバーにアクセスできること、およびプライベート/パブリックキーペアを既に生成していることを前提としています(ない場合は、以下を参照)。次の例では、RSAを使用しています。まず、キーをコピーします(macOS、Linux、BSDなどで「ホーム」ディレクトリが異なることに注意してください)。
SCPの使用:
scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/
または、単にファイルをcat-catingしますauthorized_keys
(私はこの方法を好みます):
cat id_rsa.pub | ssh username@hostname ' cat >>.ssh/authorized_keys'
(キー名は異なる場合があります).sshディレクトリがリモートサーバーに存在しない場合は、ログインして作成する必要があります。
これで、キーがMacからリモートサーバーにコピーされました。リモートサーバー上のSSH公開キーに正しいアクセス許可を設定します。
chmod 600 ~/.ssh/id_rsa.pub
次に、SSH authorized_keysファイルにキーを追加します(ファイルが存在しない場合は作成します)。
ファイルがauthorized_keys
既に存在する場合は~/.ssh
、次のコマンドを使用します。
cat id_rsa.pub >> authorized_keys
ファイルが存在しない場合は、次のコマンドを入力します。
cat id_rsa.pub > authorized_keys
chmod 600 authorized_keys
chown user:group authorized_keys
アプリケーション->ユーティリティ->ターミナルに移動してターミナルを開きます
ターミナルで、次のコマンドを使用してキー生成を開始します
ssh-keygen -t rsa
次に、秘密鍵ファイルを作成する場所を指定するよう求められます。
キーを保存するファイルを入力します(/Users/username/.ssh/id_rsa
):
これを空のままにして、デフォルトの場所にあるキーを作成します/Users/username/.ssh/id_rsa
。公開鍵ファイルは、同じ名前で同じ場所に作成されますが、拡張子は.PUBです。
パスフレーズを選択するように求められたら。これは、秘密鍵を使用するためのオプションのパスワードです。
Enter passphrase (empty for no passphrase):
SSHキーが生成されます。
パスフレーズを入力すると、接続するたびにパスフレーズを入力する必要があります。ユーティリティssh-agent
はパスフレーズをメモリに保持するので、同じセッション中に接続するたびにパスフレーズを手動で入力する必要がなくなります。詳細についてはman ssh-agent
ssh-copy-id
は、上記のいくつかを自動化するための素晴らしいツールです。
いくつかの可能性があります。あなたの例は明らかに動作しませんが、sshpass
ユーティリティを使用して同様のことを達成できます:
sshpass -p password ssh host@IP
注、これは推奨されませんので、password
他のプロセスやシェル履歴に表示されます。
同じことを行うより良い方法は、SSHキーを使用してパスワードなしの認証をセットアップすることです。要するに:
ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP
sshpass
推奨どおりに試しましたが、コマンドが見つからないというメッセージが表示されました。
ps auxw | grep sshpass
他のユーザーにsshパスワードを通知します。
pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh pi@192.168.0.208
。zzzzzzzz
リテラルです。sshpassはパスワードの内容をマスクします。おそらく以前のイテレーションはプライバシーを意識していなかったでしょう。
私もこれに対する答えを探すのに長い時間を費やしました。安全ではなく、これらすべての人がRSAキー(より安全で信頼性の高いアイデアです)を使用するように言っているにもかかわらず、かなり可能です。
expect
このために呼び出されたプログラムを使用してください。Expectは、標準出力(および正しく構成されている場合は標準エラー出力)を監視し、特定のメッセージを待って出力で応答します。Expect自体は実際にはスクリプト言語であり、これと同じことを行っていたとき、タイミングのために自分のスクリプトを適切に動作させるのに非常に苦労しました。ただし、expectにはと呼ばれる便利なユーティリティも含まれていますautoexpect
。
autoexpectでは、ユーザーを監視し、expectスクリプトを生成します。autoexpectと必要なコマンドを実行するだけです:
autoexpect ssh host@ip
そして、あなたが通常することをします。(exit
ssh'dシェルに入力して)プログラムを終了すると、スクリプトが生成されます。記述しているスクリプト全体を予期スクリプトに入れたくない場合はscript.exp
、exit
コマンドをシェルに入力する前に、autoexpectからスクリプトを編集して終了できます。スクリプトの末尾を変更するために移動する行は次のとおりです。
expect eof
これはファイルの終わりを予期することを意味します。お役に立てれば!
使用expect
は、テストスイート以外でssh接続にログインするのは明らかに間違っています。
@ ben-aが探しているものは、すでにsshに実装されています。使い方はコツです。だからここに行きます:
ssh-keygen
ます。ECDSAまたはRSAのいずれかを-t
(またはタイプ)として使用し、RSAの場合は2048または4096を-b
(またはBITSの長さ)として使用します。執筆時点ではこれで十分です。常にパスワードを使用してください!ssh-copy-id
上記の方法論を利用して、ログオンしているマシン(サーバー)に~/.ssh/authorized_keys
ファイルを作成します。生成したばかりの公開鍵のコピーがあります。~/.ssh/config
。存在しない場合は作成できます。このファイルでは、必要に応じて以下を追加します
host <name you want to use for this connection>
Hostname <DNS or IP of the server>
user <user name you want to use>
identitiesonly yes
identityfile <path to the private key>
ssh <name>
接続をセットアップするためだけに使用できるようになりましたが、キーのパスワードが必要です。これを解決するには、この目的のために開発および組み込まれたssh-agentを使用します。キーをエージェントに追加するには、を使用しますssh-add <path to keyfile>
。パスワードの入力を求められ、このセッションのキーが安全に保存されます。「ssh-agentが見つかりません」(または同様の)エラーが発生した場合、おそらくエージェントが起動されていないことを意味します。を使用して、このセッションで開始できssh-agent bash
ます。これにより、エージェントがアクティブな状態で新しいシェルが開始されます。
これらの手順を使用すると、資格情報をハイジャックすることで誰かになりすますのを難しくするだけでなく、使いやすさを維持できます(プレーンパスワードよりも使いやすくなります)。