SSHはユーザー名/ホスト名の組み合わせを許可しますが、SCPがこれを許可しないのはなぜですか?

SSHはユーザー名/ホスト名の組み合わせを許可しますが、SCPがこれを許可しないのはなぜですか?

私はsshCyber​​Arkを介してLinuxホストにログインすることに慣れています。これがユーザー名/ホスト名の組み合わせが次の理由です。DB6164@DB6164CP#[email protected]#[email protected]

次のsshコマンドが有効です。

$ /usr/bin/ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#[email protected]#[email protected]

ただし、次のscpコマンドは失敗します。

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no DB6164@DB6164CP#[email protected]#[email protected]:/tmp/file.txt file.txt
DB6164@DB6164CP#[email protected]#22: invalid user name

ホスト名から「#」を削除すると文句は停止しますが、scpCyber​​Arkは失敗します。

scpまた、URI形式を試してみましたscp://[user@]host[:port][/path]

$ /usr/bin/scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no scp://DB6164@DB6164CP#[email protected]#[email protected]/tmp/file.txt file.txt
scp://DB6164@DB6164CP#[email protected]#[email protected]/tmp/file.txt file.txt: invalid uri

しかし、これも失敗した。

なぜscp失敗し、いつssh成功し、上記のscpコマンドを機能させるにはどうすればよいですか?

修正する:複数のホスト(Cyber​​Arkを介して接続されている)に対して上記のタスクを実行する必要があります。

答え1

scp -o User='foo@bar@baz#quux' host:/rpath lpath

scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
  -o User='DB6164@DB6164CP#[email protected]#22' \
  PsmpDblanVip.example.net:/tmp/file.txt file.txt

答え2

実際の解決策として要求された質問に基づいて、この宛先のデフォルトマッピングを設定できます。これにより、すべてのトランスポートの使用がssh簡素化されます。

これをユーザーとCyber​​Arkエージェントに分割します。最終的なターゲットホストが正しくない場合は、それに応じて以下の例を調整してください。DB6164@DB6164CP#[email protected]#[email protected]DB6164@DB6164CP#[email protected]#22PsmpDblanVip.example.netDB6164CP

ファイルを編集(または作成)~/.ssh/configし、ファイルの末尾に以下を追加します。

########################################################################
# CyberArk proxy
#
Host DB6164CP
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
        Hostname PsmpDblanVip.example.net
        User DB6164@DB6164CP#[email protected]#22


########################################################################
# Default
#
Host *
        ForwardX11 yes
        ForwardX11Trusted yes
        Compression yes
        ServerAliveInterval 60

これらの設定は、以前に明示的に定義され、一致しなかったすべての接続に使用されるため、プライマリホストの設定を調整する必要があります。 (最初Hostに一致する部分が使用された部分です。)

この設定が完了したら、単にターゲットを参照できますDB6164CP

ssh -n DB6164CP id
scp -p /etc/hosts DB6164CP:/tmp/my_hosts

エントリに追加のホスト名とパターンを追加できるため、Host同じプロキシホストを通過する宛先が複数ある場合はそれを定義できます。

Host DB6164CP OTHER*
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
        Hostname PsmpDblanVip.example.net
        User %r@%h#[email protected]#22

以下のようにターゲットを参照してください。

ssh DB6164@DB6164CP
ssh someOtherUser@OTHERhost1      # Or: ssh -l someOtherUser OTHERhost1
scp DB6164@DB6164CP:file.txt .    # Or: scp -l DB6164 DB6164CP:file.txt

必要に応じて%rおよびを使用できます%h。常に固定ユーザー名がありますが、ホストが可変である場合は、代わりに固定文字列を入力してください%r(元の問題シナリオの場合)。

関連情報