web-dev-qa-db-ja.com

デフォルト以外のIDファイルの場所を使用したパスワードなしのSSH

スタートアップスクリプトの一部として、いくつかのgnome-terminalウィンドウを自動的に開く必要があり、それらのターミナルの1つが自動的に送信します。

ssh [email protected]

これに関する制限は、SSH接続を完了するためにパスワードを入力する必要があることです。

私がやりたいことは、スクリプトがコマンドを開始し、接続を完了することです。その範囲で、受け入れられた答え ここ に概説されている指示に従うことを試みました。

接続したいシステムから実行しました:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

その後、パスフレーズの入力を求められました。私はそれが何のためにあるのかわからなかったので、これを空にしておきました。そのため、使用するたびに上記のパスフレーズでロックを解除する必要があると思いました。

上記のリンクの手順を続けて、次を実行して受け取りました。

ssh-copy-id user@IP
ERROR: No identities found

クイック検索の結果、デフォルトの保存場所ではないため、キーの場所を指定する必要があることが判明したため、次の点を修正しました。

ssh-copy-id -i /home/user/ssh/keys/server1key.pub [email protected]

サーバーのパスワードを尋ねた後、キーを正常に追加しました。ただし、「ssh user @ IP」でログインしようとすると、パスワードの入力を求められました。

私が知っている限り、リンクされた指示に正しく従ったので、何かが足りないか、または既存の構成がこれを機能させるのを妨げていますか?

どちらのシステムも18.04とopensshを使用します。

15
hiigaran

ssh-copy-idが初めて失敗したのと同じ理由で、つまり、IDファイルにデフォルト以外の場所を選択したために失敗します。

-i /home/user/ssh/keys/server1keysshコマンドに追加することにより、同じ方法で解決できます。クライアント側ではprivateキーファイルの場所が必要であることに注意してください。

man sshから

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

または、次の行に沿って、ホストの~/.ssh/configファイルエントリを作成することもできます。

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
34
steeldriver

Ssh-copy-idが失敗するもう1つの理由は、キーがsshエージェントに追加されないためです。

Ssh-agemtが実行されている場合、最初にチェックして開始します

$ eval "$(ssh-agent -s)"

プロセスIDを取得したら、キーを追加できます

$ ssh-add -k /home/user/ssh/keys/server1key

-kで、キーチェーンにキーを追加します

キーが追加されているかどうかを確認します

$ ssh-add -l

Ssh-copy-idが動作するはずです。

2
Martijn