• 締切済み

多段SSHでのrsyncについて

localとBとをrsyncする方法について。 localから仲介サーバへは秘密鍵で認証させています。 ポートフォワーディングで下記のように接続し、 ssh -t -L ポート番号:サーバA:ポート番号 ユーザ名@サーバA ssh -t -L ポート番号:サーバB:ポート番号 ユーザ名@サーバB 接続されたポート番号からrsyncを実行すればうまくいくのでは?と思い 実行してみたのですが不明点がありうまくいきません。 不明点は、秘密鍵の認証をどこに記述すればよいのか・・・です。 ssh -i 秘密鍵path ユーザ名@サーバ ↑これを多段SSHのポートフォワーディングではどのように加えればいいのか・・・。 そもそも↑で提示しているポートフォワーディングのコマンド自体に誤りがあるかもしれません。 上記に対してのアドバイス、もしくは他の方法の提案等をして下さると幸いです。 宜しくお願い致します。

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

仲介サーバがAという事で良いのだろうか。 $ ssh -t -L ポート番号:サーバA:ポート番号 ユーザ名@サーバA ssh -t -L ポート番号:サーバB:ポート番号 ユーザ名@サーバB これだと、内側のsshはサーバAで実行されるため、localとBでrsyncできないね。sshでサーバAに行ってしまうと、その中で実行するコマンドの主体はサーバAになるため、その中でrsyncするならサーバAがlocalに向かってrsyncで取得したものをサーバAがサーバBに向かってrsyncで書き込むという流れにしないといけない。 AがlocalとBのrsyncを仲介する場合、localにAとBの秘密鍵を持つしかない。 local ↑↑ || 左がssh to B over ssh to Aで、右がssh to A |↓ |A | | ↓ B コマンド的には、localで2つの端末を開き、 $1 ssh -L 4422:サーバB:22 ユーザ名@サーバA これで、localから見るとlocalhost:4422にアクセスするとそれがサーバBのsshdにつながるようになる。そこで、 $2 rsync -avz --delete -e "ssh -p 4422" /home/ユーザ名 localhost:/home/ユーザ名 とでもすればいいのではないかな。実際試してないので分からんけど。 ただ、仮にやりたいことが夜間バッチによるバックアップだとすると、ひとつのトンネルを待ちうけ状態にしておかないといけないこの方法はそぐわない。 その場合は、OpenVPNなどでssh以外のトンネルをはるしかないんじゃないか。とにかく、行動の主体がlocalなままでlocalから(サーバAの後ろに隠れているのであろう)サーバBのsshへ直接接続できるようにならないとlocalからサーバBへのrsyncはできない。 --deleteの機能は使えなくなってしまうが、rsyncではなくtarとパイプでの転送を行うなら二重転送は問題なく行える。tarの例は以下のとおりで、この場合はトンネルではなく、localではtarで固めたものをそのまま標準出力に吐き、サーバBにssh接続するコマンドを実行するサーバAへのsshにパイプで流す。そうすると、今度はサーバAがサーバBの標準入力へ転送し、サーバBは標準入力からtarで中身を取り出して保存する。 $ tar cz -C /home ユーザ名 | ssh ユーザ名@サーバA -C "ssh ユーザ名@サーバB -C \"tar xz -C /home\"" sshで実行するコマンドとlocalで転送するファイルを固めるtarがパイプによって結ばれるためにお互いが相手のコマンドの実行を邪魔しないんだね。 この時、鍵を使うならlocal→サーバAの鍵と、サーバA→サーバBへの鍵が必要になる。

関連するQ&A

  • ssh + rsync でパスワードを聞かれなくする方法

    SSH + rsync(rsync -e ssh ・・・で ssh 回線で同期)でファイルをコピーする時に、パスワードを聞かれなくする方法はないでしょうか? http://www.okweb.ne.jp/kotaeru.php3?q=323149 などを参考に、公開鍵を作りログイン先のauthorized_keysに登録しました。(公開鍵を作るときにパスフレーズを入力してません。) こうすると、たしかに"パスフレーズ"は聞かれないのですが、"ログインパスワード"は毎回聞かれます。これは仕方がないのでしょうか? ●ファイルのコピー先がファイアーウォールで ssh のポートくらいしか空いていないので、 ssh + rsync を使おうと思っています。 ●同期したいフォルダは複数あるので、スクリプトを作って rsync -avz -e ssh フォルダAを同期 ・・・ rsync -avz -e ssh フォルダBを同期 ・・・ ・・・ という感じで一気に同期できれば便利だな と思っていました。 ところが今のままでは、rsync コマンド一回ごとに ログインパスワードを入力することになってしまいます。

  • SSH + rsyncがダメです

    パスワード無しでサーバAの/home,/etcをからサーバBの/tmp/内にrsyncでコピーしたいのですがなかなかうまくできません。今のところrsyncで以下のような記述を実行して動作確認まではできました。 rsync -avz -e ssh /home/ サーバB:/tmp/ 当然ながら実行後パスワードを聞かれてしまいます。 そこでSSHの設定をしなければと思いネットを巡って試したのですが、どうしてもパスワードを聞かれてしまいます。 SSHの設定が分かってないのだと思います。 ずばり!を教えていただけるとうれしいです。 環境Redhat7.3 インストールしたままです。何もいじってません。ご教授お願い致します。

  • rsyncやSSH接続ができません。

    ■rsyncがRSHでなく必ずSSH接続になってしまいます。 環境変数RSYNC_RSHもないのですが何故でしょうか? なおPort番号は22ではなく220をSSHにしています。 rsync -avz /home/test backup-server:/home/backup ssh: connect to host backup-server port 22: Connection refused rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(359) ■仕方なくSSHで接続しようと試みましたが今度はパーミッションエラーでした。 SSHのバージョンはサーバーは2で、クライアントはCentOS4.1ですがSSHの バージョンがわからない状態です。 SSHのバージョンはどう調べれば良いでしょうか? sync -avz -e "ssh -p 220 -oHostKeyAlias=test-server" /home/backup backup-server:/home/backup Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(359) なお、authorized_keysは、id_rsa.pubからコピーしてあり、644。 known_hostsには、test-serverは入っていて、644です。

  • SSHによる通信で速度が出なくて困っています。

    SSHによる通信で速度が出なくて困っています。 外部から。ローカル内のみのWEBサーバーにアクセスしたく、SSHのポートフォワーディングを使用しました。 SSHサーバーはfreeSSHdです。(winXP)ポートは8000番を使用しています。秘密鍵による認証です。 クライアントのPuttyから、サーバーのIP:8000でアクセスし、フォワードするポートに、webサーバーの8080番、源ポートに1234番を使用し、ブラウザからhttp://localhost:1234/でアクセスが出来るのですが、速度が殆ど出ません。200kb/s弱 容量の大きいファイルはとてもDLが厳しい状態です。 ファイルをDLしている間は、サーバー機のCPU使用率が高いです。 外部からのアクセスではなく、サーバー、クライアント共、ローカル内で試してみても同様です。 暗号化しているので遅くはなると思うのですが、ここまで重いものなのでしょうか? freeSSHdにSFTP機能もあるのですが、これをWinSCPからSFTP接続しファイルをやり取りする分には、DL速度は高速に出来ます。UPはポートフォワーディングと同様、速度が著しく出ません。 解決策などありましたら、ご教授ください。

  • サーバ側ではsshポートフォワーディングのプロセスが表示されない!?

    RedHat9の環境です。 [user01@local.host.co.jp]$ ssh -L 60143:remote.host.co.jp user01@remote.host.co.jp password: [user01@remote.host.co.jp]$ として ポートフォワーディングを行いました。 ローカルホスト上では [root@local.host.co.jp]# ps ax | grep ssh 24421 pts/5 S 0:00 ssh -L 60144:remote.host.co.jp:143 user01@remote.host.co.jp となりますが、 [root@remote.host.co.jp]# ps ax | grep ssh 10078 ? S 0:01 [sshd] となってしまいます。 サーバ側(remote.host.co.jp)でポートフォワーディングを監視するにはどうしたらいいのでしょうか?

  • rsyncをPHPで行いたいのですが、

    いつもお世話になっております。 rsyncをPHPのexecコマンドから行いたいと思っているのですが、 現状、コピー元のサーバー、コピー先のサーバーともroot権限が無い状態ですので、 公開鍵、秘密鍵を作ることができない状況です(root権限無かったら作れないですよね?)。 なので、sshでpassを聞かれても良いのでrsyncを実行しようと思うのですが、 passを聞かれる場合でもPHPのexecコマンドからrsyncを実行することはできますでしょうか? 色々サイトを見ても鍵を生成してパスワードを省略することしか記載されていないので。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • SSHのホスト認証について

    現在VineLinux3.2を使ってサーバの勉強をしている、ド素人です。 SSHのユーザ認証が、 (1)サーバ側で乱数生成→クライアントの公開鍵で暗号化→ (2)クライアントに送信→ (3)クライアントが受信→ (4)秘密鍵で複合化→サーバに送信→ (5)サーバはクライアントから送られた乱数を確認して認証 という流れで、なるほど、これでユーザを認証できるってのは分かるのですが、 ホスト認証がよくわかりません、 SSHでサーバにアクセスすると、 サーバの公開鍵が ~/.ssh/knows_hosts に登録されますが、 この公開鍵を使って、ユーザ認証と同じ方法で接続先ホストを認証してるのでしょうか? そうだとしたら、 2度目のアクセスからはホストを認証するのに、 この~/.ssh/known_hostsの 公開鍵を使った方法が有効だというのは分かりますが、 一番最初のアクセスではこの公開鍵を使ってもホストの認証は出来ないと思うのですが(接続先から送られてくる公開鍵を使うだけなので) どういう仕組みになってるのでしょうか? よろしくおねがいします。

  • SSHの公開鍵方式の接続について

     SSHの公開鍵(&秘密鍵)の認証での接続について質問です。  現在、Mac OSXのターミナルからLinuxのFC5サーバーに接続しようとしているのですが、うまく接続できません。  FC5側のSSHサーバーはすでに起動しているのですが、最初のホスト認証で躓いています。最初のアクセスの歳にSSHサーバー側から認証鍵を渡されるのですが、その時点で謝ってnoを選択してしまいました。以後、公開鍵が使えない状態になってしまい、接続しても「Permission denied (publickey,gssapi-with-mic).」になってしまいます。最初の接続時の公開鍵を再発行してもらうにはどうしたらよいのでしょうか?  ホスト認証の後は、ユーザー認証となると思いますが、この設定もちょっとよくわからない部分があります。  サーバー側で公開鍵と秘密鍵のセットをssh-kegenで作りますが、MacのOSXのターミナルから接続する場合は、この秘密鍵をどこに保存すればようのでしょうか?また保存後にこの秘密鍵を呼び出すにはどうしたらようでしょうか?  OSXも基本的にはUNIXなので、ホームディレクトリに.sshディレクトリなどを作成して保存するのでしょうか?    詳細な設定方法を教えて頂けると幸いです。

  • ssh鍵認証

    Aサーバーでsshで秘密鍵と公開鍵をを作成し、公開鍵のみをBサーバーへ置きました。 AサーバーからBサーバーへノンパスでログインはできたのですが、 BサーバーからAサーバーへのノンパスでのログインはできません。 (パスワードが聞かれてしまう) BサーバーからAサーバーへノンパスログイン(鍵認証)するにはどのようにすればよろしいでしょうか? ご存知の方、宜しくお願いします。

  • SSHって・・?

    Linux勉強中で疑問に思っている点があります。 SSHを利用すると、暗号化を行うことができるということですが・・・・教えて下さい。たとえば・・・ 例:Aはサーバーで秘密鍵を保持、Bはクライアントで   公開鍵を保持。 B(クライアント/公開鍵)→A(サーバー/秘密鍵) 公開鍵を使ってサーバーAにデータを送信後、 サーバー側では、秘密鍵を使ってデータを解読。 A(サーバー/秘密鍵)→B(クライアント/公開鍵) この場合は、データはどう暗号化されているのでしょうか?秘密鍵でデータを暗号をすると、公開鍵を持ってる人達には解読できてしまうのですよね? "ls"コマンドで叩いた機密情報が仮にA→Bに結果が返ってくる場合は、暗号化されないのでしょうか? SSHを使ってFTPをする場合も同様のことはいえないのでしょうか?? Webで情報を集めて、公開鍵と秘密鍵の事に関しては 調べてみたつもりなのですが・・・ 申し訳ありませんが、ご教授下さい。 よろしくお願い致します。