リモート サーバーからローカル マシンにファイルを scp しようとしています。ポート 80 のみにアクセスできます。
私は試した:
scp -p 80 username@www.myserver.com:/root/file.txt .
しかし、このエラーが発生しました:cp: 80: No such file or directory
scp コマンドでポート番号を指定するにはどうすればよいですか?
ssh とは異なり、scp は小文字の p の代わりに大文字の P スイッチを使用してポートを設定します。
scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default
小文字の p スイッチは、時刻とモードを保持するために scp で使用されます。
以下は、2 つのスイッチに関するすべての詳細と、scp に大文字の P が選択された理由の説明を含む、scp のマニュアル ページからの抜粋です。
-P port リモート ホストで接続するポートを指定します。-p は rcp(1) でファイルの時間とモードを保存するためにすでに予約されているため、このオプションは大文字の 'P' で書かれていることに注意してください。
-p 元のファイルの変更時刻、アクセス時刻、およびモードを保存します。
おまけ: SSH デーモンが SSH 接続を受け入れるために使用しているポートを特定するにはどうすればよいですか?
この質問にはnetstat
、次のようにユーティリティを使用して答えることができます。
sudo netstat -tnlp | grep sshd
または、はるかに読みやすい単語ベースの netstat オプション名を使用します。
sudo netstat --tcp --numeric-ports --listening --program | grep sshd
ssh デーモンがリスニング ポートのデフォルト値で構成されていると仮定すると、表示される出力を以下に示します (スクロールしなくてもテーブル全体を表示できるようにするために、列間の空白を少しトリミングしています)。
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State ID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 888/sshd: /usr/sbin
tcp6 0 0 :::22 :::* LISTEN 888/sshd: /usr/sbin
重要な注意点
上記の例では、すべてのProgram Namessudo
を表示できるようにするために、管理者権限で netstat を実行するために使用されました。通常のユーザーとして netstat を実行する場合 (つまり、sudo を使用せず、他の方法で管理者権限が付与されていないと仮定した場合)、所有者として UID を持つソケットのプログラム名のみが表示されます。他のユーザーに属するソケットのプログラム名は表示されません (つまり、非表示になり、代わりにプレースホルダーのハイフンが表示されます)。
Proto Recv-Q Send-Q Local Address Foreign Address State ID/Program name
tcp 0 0 127.0.0.1:46371 0.0.0.0:* LISTEN 4489/code
...
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
...
(非常に賛成の)コメントの1つに対処するために更新して脇に置きます:
オプションの順序に関する Abdull のコメントに関してscp
、彼は次のように提案しています。
scp -r some_directory -P 80 ...
...、オプションとパラメータを散在させます。これは、-r
スイッチが追加の引数をとらずsome_directory
、コマンドの最初のパラメータとして扱われるため、-P
以降のすべてのコマンド ライン引数がコマンドの追加パラメータのように見えるためです (つまり、ハイフンで始まる引数はもはや使用されません)。スイッチと見なされます)。
getopt(1)
パラメーターはオプション (つまり、スイッチ) の後に来る必要があり、それらを散在させてはならないことを明確に定義しています。
getopt が呼び出されるパラメータは、getopt が解析を行う方法を変更するオプション (SYNOPSIS のオプションと optstring) と、解析されるパラメータ (SYNOPSIS のパラメータ) の 2 つの部分に分けることができます。2 番目の部分は、オプション引数ではない最初の非オプション パラメーターか、最初に出現した '--' の後から始まります。最初の部分に「-o」オプションまたは「--options」オプションが見つからない場合、2 番目の部分の最初のパラメーターが短いオプション文字列として使用されます。
-r
コマンドラインオプションはそれ以上の引数を取らないため、some_directory
「オプション引数ではない最初の非オプションパラメーター」です。したがって、getopt(1)
man ページで明確に説明されているように、その後に続くすべてのコマンド ライン引数 (つまり-P 80 ...
) は、非オプション (および非オプション引数) と見なされます。
したがって、実際には、これはgetopt(1)
オプションの終わりと灰色のテキストで区切られたパラメーターの始まりで提示された例をどのように見るかです:
scp-rsome_directory -P 80 ...
これは動作とは関係なくscp
、すべては POSIX 標準アプリケーションがgetopt(3)
一連の C 関数を使用してコマンド ライン オプションを解析する方法に関係しています。
コマンド ラインの順序と処理に関する詳細については、以下をgetopt(1)
使用してマンページをお読みください。
man 1 getopt
あなたはよりクールなものを知ってい-P
ますか?なし
このサーバーを数回以上使用する場合は、次~/.ssh/config
のようなエントリを含むファイルをセットアップ/作成します。
Host www.myserver.com
Port 80
また
Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
HostName www.myserver.com
Port 80
User username
次に、次を使用できます。
scp username@www.myserver.com:/root/file.txt .
また
scp short:/root/file.txt .
「ホスト」行では、ssh、scp、rsync、git などで何でも使用できます
構成ファイルで使用できる多くの構成オプションがあります。以下を参照してください。
man ssh_config
scp help は、ポートが大文字の P で指定されていることを示しています。
~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
お役に立てれば。