@suzu6

主にWEBと解析の技術について書きます。

広く浅くも続ければ深くなるはず。

rsyncとsshでInvalid argumentとエラーがでた

ホスト先にファイル同期するrsyncでssh: connect to host x.xxx.xx.xx port 2222: Invalid argumentエラーがでた。 このエラーは中々みることも無いと思うので記念に記す。

  • 環境: CentOS 7.7.1908

rsyncはsshのオプションを付けるとホスト先のサーバにファイルを同期できる。 authorized_keyやrsyncの実行権限など設定が必要だがとても便利で何度か利用した。

そんな中、バックアップスクリプトのテストで以下のエラーが出た。 x.xxx.xx.xxはホスト先のIPアドレス。

$ rsync -navu -e "ssh -p 2222" --rsync-path="sudo rsync" /path/to/localfile user@$x.xxx.xx.xx:/path/to/remotefile
ssh: connect to host x.xxx.xx.xx port 2222: Invalid argument
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2]

どうやらsshで不正な引数があるようです。 検索しても該当する記事は無く、sshができることを確かめたりrsyncのオプションが悪いのか、firewalldやその他のネットワークが原因かと散々悩んでいた。

結局、ホスト名のところにが付いていてそこに対してのエラーだった。 スクリプトで${user}@${hostname}と変数を使っていた名残があったためだ。

SSHでも同じエラーが出るか確かめてみる

# $ + ipadress
$ ssh -p 2222 user@$x.xxx.xx.xx
ssh: connect to host x.xxx.xx.xx port 2222: Invalid argument

# ハイフン
$ ssh -p 2222 user@---
ssh: Could not resolve hostname ---: Name or service not known

# $ のみ
$ ssh -p 2222 user@$
ssh: Could not resolve hostname $: Name or service not known

# ! + ipadress
$ ssh -p 2222 user@!x.xxx.xx.xx
ssh -p 2222 user@ls /home.203.0.2
ssh: Could not resolve hostname ls: Name or service not known

# # + ipadress
$ ssh -p 2222 user@#x.xxx.xx.xx
ssh: Could not resolve hostname #x.xxx.xx.xx: Name or service not known

user@$x.xxx.xx.xxとするとInvalid argumentが出るが、他は大体Name or service not knownとなる。 $x.xxx.xx.xxで変数だと勘違いしたのだろうか?

このエラーに出会う人はほぼいないと思うけど、助けになったのなら幸いです。