ここに私が試したものがあり、エラーが発生しました:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
ここに私が試したものがあり、エラーが発生しました:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
回答:
OpenSSHには、これを行うためのコマンドが付属していますssh-copy-id。リモートアドレスを指定するだけで、公開鍵authorized_keysがリモートマシン上のファイルに追加されます。
$ ssh-copy-id tim@just.some.other.server
-iフラグを使用して、ローカルマシンで公開キーを見つける必要がある場合があります。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>シェルによって処理され、シェルではなくSSHを介してコマンドを実行しています。その後、あなたのコマンドを実行するシェルを実行するSSHを持つ彼の修正は、動作するはずです
ssh-copy-idは機能しませんよね?
あなたはいつもこのようなことをすることができます:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
catローカルマシンからsshセッションに移行できるかどうかはわかりません。提案されているように/ tmpに移動するだけです。
編集:これはまさにssh-copy-idそうです。マイケルが言ったように。
catまたはそれ以外から)パイプできます。あなたが説明しているのは、昔ながらの方法です。ssh-copy-id入力ミスやファイルへの不正なアクセス許可のリスクが少ないため、推奨されます。
この回答では、質問に示されている意図した方法を機能させる方法について説明します。
リモートコンピューターでシェルを実行して、>>リダイレクト演算子の特別な意味を解釈できます。
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
>>通常、リダイレクト演算子はシェルによって解釈されます。
実行するssh host 'command >> file'とcommand >> file、シェルによって解釈されることが保証されません。あなたの場合、特別な解釈なしにシェルの代わりにcommand >> file実行され、引数としてコマンドに与えられました- シェルで実行するのと同じ方法です。>>command '>>' file
SSHの一部のバージョン(OpenSSH_5.9)は、リモートサーバーでシェルを自動的に呼び出し、シェル; > >>などによって解釈されるトークンを検出すると、コマンドをサーバーに渡します。
openssh提供しますssh-copy-id。シーケンスは次のとおりです。
適切な4kキーを生成する
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
ssh-agentを起動しSSH_AGENT_PID、などの情報を取り込みます。
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
SSHエージェントへのキーのロードを開始します
ssh-add ~/.ssh/id_rsa4k
ロードされていることを確認してください
ssh-add -l
ssh-add -L
これにより、ssh-agentの内容が表示されます
実際には、リモートシステムへのSSH
ssh username@remotehost.network
これで、引数なしでssh-copy-idを実行できます。
ssh-copy-id
これにより~/.ssh/authorized_keys、ssh-agentに必要な基本情報が作成され、入力されます。
22以外のポートを選択するときにssh-copy-idで問題が発生しました...ここに、異なるssh-port(例:7572)を持つonelinerがあります:
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
実際、the ssh-copy-idコマンドはこれを正確に行いopenssh-clientます(パッケージから):
ssh-copy-id user@host
注:hostはIPアドレスまたはドメインを意味します。
また、これにいくつかの追加情報を追加したいと思います
1)宛先サーバーのSSHに別のポートを指定できます。
ssh-copy-id "-p 8127 user@host"
注:ポートは、目の前になければならないか、それが解決されません。user@host
2)ファイルを公開鍵で指定できます:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
注:
この-iオプションにより、公開キーを含むファイルで名前の適切な場所を示すことができます。
特に非標準の場所に保存したり、コンピューターに複数の公開キーがあり、特定のキーを指定したい場合に便利です。