rsyncでIDファイルをどのように使用しますか?


125

rsyncでIDファイルをどのように使用しますか?

これは、接続にIDファイルを使用するためにrsyncで使用する必要がある私が思う構文です。

rsync -avz -e 'ssh -p1234 -i〜/ .ssh / 1234-identity' \
"/ local / dir /" remoteUser@22.33.44.55: "/ remote / dir /"

しかし、それは私にエラーを与えています:

警告:IDファイル〜/ .ssh / 1234-identityにアクセスできません:そのようなファイルまたはディレクトリはありません。

ファイルは問題なく、権限は正しく設定されています。少なくともrsyncではなく、sshを実行すると、少なくとも私の構文では機能します。何が悪いのですか?リモートマシンでIDファイルを検索しようとしていますか?その場合、ローカルマシンでIDファイルを使用するように指定するにはどうすればよいですか?

回答:


86

あなたは使用することもできますssh-agentし、ssh-addメモリにキーをロードします。 sshssh-agentからIDを検出できる場合は、IDを自動的に試行します。コマンドは

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agent暗号化されていないsshキーをメモリに保持するユーザーデーモンです。sshは、実行時にssh-agentが出力する環境変数に基づいてそれを見つけます。を使用evalしてこの出力を評価すると、環境変数が作成されます。 ssh-addキーメモリを管理するコマンドです。エージェントはssh-addを使用してロックできます。鍵のデフォルトの有効期間は、ssh-agentの起動時に指定するか、または追加時に鍵に指定できます。

〜/ .ssh / configファイルをセットアップして、ポートとキーの定義を提供することもできます。(その他のオプションについては、 `man ssh_configを参照してください。)

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

sshコマンドを一重引用符で囲むと、~またはに必要なシェル展開ができなくなります$HOME。単一引用符で囲んだキーへの完全パスまたは相対パスを使用できます。


2
二重引用符と$ HOMEの使用で問題が解決しました。最初の2つのコマンドが何をしているか詳しく説明できますか?私はすでに構成ファイルの設定に慣れていました-唯一の問題は、1つのサーバーに複数のアカウントがある場合です。同じホストに複数のIDファイルを指定できるとは思いません。
cwd 2011

+1これにより、drone.ioに関する私の問題が修正されました:)どうもありがとうございました。
Bhargav Nanekalva 2014年

これはいまいましいです。FTR、たとえばUser ubuntuEC2 Ubuntuインスタンスを構成する場合など、接続するデフォルトのユーザー名を指定することもできます:)ありがとうございます!
DanielSmedegaardBuus

cshスタイルのシェル(などfish)を使用している場合は、次のようにしますeval (ssh-agent -c)
Dave

77

どちらかを使用 $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

またはキーへのフルパス:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Ubuntuでrsync 3.0.9を使用してテスト済み


3
はい、これは問題なく機能します。ssh-agentやその他の構成オプションを使用する必要はありません。
laurent

2
+1:これは、 "ls '〜'"を実行できなかったのと同じように、グロビングの問題です
Alex

$HOME単純な引用符(変数展開なし)内では機能しないため、二重引用符または絶対パスを使用する必要があります。
アルコール2014

標準ではBashは機能する"$HOME"$HOME、何の違いもなく機能します("${HOME}"複雑にしたい場合は、これも可能です)
Tombart

一重引用符を二重に変更しました。
スティーブベネット

36

IDキーファイルへの絶対パスを指定する必要があります。これはおそらくrsyncのある種の風変わりなことです。(結局完璧にはなれない)

数日前にこの問題に遭遇しました:-)


〜を使用できますが、/ home / username /に正しく置換されないため、一重引用符内に埋め込むことはできません。正しく機能するには、二重引用符を使用する必要があります。@ ilcaveroのソリューション
Xを

24

これは私のために働く

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

2
何らかの理由で、IDファイルへのフルパスを指定する必要がありました/home/user/.ssh/1234-identity。その後、うまくいきました。Darhuukの回答で示唆されているように、それが別のシェルである可能性があります。
osa

@osaあなたは私をそこに救った!DrupalとrSYNCに問題があり、問題はパスです...
Lee Woodman

6

コマンドをbashまたはshで実行していますか?これは違いを生むかもしれません。で置き換え~てみてください$HOME-eオプションの文字列を二重引用符で囲みます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.