984

リモート サーバーからローカル マシンにファイルを scp しようとしています。ポート 80 のみにアクセスできます。

私は試した:

scp -p 80 username@www.myserver.com:/root/file.txt .

しかし、このエラーが発生しました:cp: 80: No such file or directory

scp コマンドでポート番号を指定するにはどうすればよいですか?

4

13 に答える 13

1726

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
于 2012-04-26T20:37:03.303 に答える
57

あなたはよりクールなものを知ってい-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

于 2016-04-27T00:14:37.857 に答える
6

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

お役に立てれば。

于 2015-07-31T16:59:05.493 に答える