日常开发工作中总会遇到需要本地与服务器之间进行文件传输的需求,如日志文件下载到本地等
常用文件传输命令#
- zssh,适合小文件传输,自用时发现超过2MB以后好像传输就有问题了
- rsync
- scp
rsync和scp命令都支持文件的双向传输,本地到远程或远程到本地,由于服务器密码一般没有权限拿到,所以执行这两个命令基本都是在远程服务器上执行,执行时需要输入本机密码就是了
基本命令如下,以下命令均在远程服务器上执行
# 远程->本机
scp <fileName.txt> <username>@<ip_address>:<absolute_path>
# 本机->远程
scp <username>@<ip_address>:<absolute_path> <path>
scp与rsync的区别#
- scp 通过安全的 SSH 连接将文件从本地机器复制到远程机器,而 rsync 允许您同步远程文件夹。
- scp 读取源文件并将其写入目标,是在本地或通过网络执行线性复制。rsync 也是在本地或通过网络复制文件,但它使用特殊的增量传输算法和一些优化来使操作更快。
- scp 总是安全的,而 rsync 必须通过 SSH 传输才能安全。
- 如果要传输大文件,并且传输在完成之前断开连接,rsync 会从中断的地方继续传输,而 scp 没有。
- rsync 比较每一端的文件并只传输更改文件的更改部分,当你第一次传输文件时,它的行为与 scp 非常相似,但是对于大多数文件未更改的第二次传输,它推送的数据将比 scp 少得多。这也是一种重新启动失败传输的便捷方法,你只需重新发出相同的命令,它就会从上次中断的地方开始,而 scp 将从头开始。
scp 端口问题#
1 ssh port 22: Connection timed out#
$ scp -v /tmp/refund_channel_202404.txt wwf@10.235.100.198:/home/wwf/Documents/
Executing: program /usr/bin/ssh host 10.235.100.198, user wwf, command scp -v -t /home/wwf/Documents/
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 10.235.100.198 [10.235.100.198] port 22.
debug1: connect to address 10.235.100.198 port 22: Connection timed out
ssh: connect to host 10.235.100.198 port 22: Connection timed out
lost connection
查看sshd服务状态正常
$ sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-05-06 09:26:26 CST; 46min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 122343 (sshd)
Tasks: 1 (limit: 18823)
Memory: 760.0K
CPU: 17ms
CGroup: /system.slice/ssh.service
└─122343 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
5月 06 09:26:26 ubuntu systemd[1]: Starting OpenBSD Secure Shell server...
5月 06 09:26:26 ubuntu sshd[122343]: Server listening on 0.0.0.0 port 22.
5月 06 09:26:26 ubuntu sshd[122343]: Server listening on :: port 22.
5月 06 09:26:26 ubuntu systemd[1]: Started OpenBSD Secure Shell server.
防火墙是关闭的
$ sudo ufw status
Status: inactive
检查网卡配置,发现多了一个utun,至于这个网卡配置是怎么增加的不太清楚,可能是virtualbox导致的?
$ ip a
2: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 64:79:f0:ca:06:ca brd ff:ff:ff:ff:ff:ff
inet 10.235.100.198/20 brd 10.235.111.255 scope global dynamic noprefixroute wlp0s20f3
valid_lft 23995sec preferred_lft 23995sec
inet6 2408:8607:1b00:1b::7f/128 scope global dynamic noprefixroute
valid_lft 2590702sec preferred_lft 603502sec
inet6 2408:8607:1b00:1b:ae78:4bea:b1e3:5154/64 scope global temporary dynamic
valid_lft 599996sec preferred_lft 81360sec
inet6 2408:8607:1b00:1b:2fa4:62ff:cb3:9699/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591999sec preferred_lft 604799sec
inet6 fe80::1cbb:294b:1069:3323/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: utun: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 10.225.77.79/22 scope global utun
valid_lft forever preferred_lft forever
inet6 fe80::33d:d2d0:1c5f:5676/64 scope link stable-privacy
valid_lft forever preferred_lft forever
服务器上ping 10.235.100.198无法ping通, ping 10.225.77.79可以ping通
观察utun比wlp0s20f3多了个POINTTOPOINT的属性
修改scp命令ip地址后,传输文件成功
$ scp -v uniq_fuids_0325.csv wwf@10.225.77.79:/home/wwf/Documents/
Executing: program /usr/bin/ssh host 10.225.77.79, user wwf, command scp -v -t /home/wwf/Documents/
OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Connecting to 10.225.77.79 [10.225.77.79] port 22.
debug1: Connection established.
debug1: identity file /home/work/.ssh/id_rsa type -1
debug1: identity file /home/work/.ssh/id_rsa-cert type -1
debug1: identity file /home/work/.ssh/id_dsa type -1
debug1: identity file /home/work/.ssh/id_dsa-cert type -1
debug1: identity file /home/work/.ssh/id_ecdsa type -1
debug1: identity file /home/work/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/work/.ssh/id_ed25519 type -1
debug1: identity file /home/work/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
debug1: match: OpenSSH_8.9p1 Ubuntu-3ubuntu0.7 pat OpenSSH* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-sha1-etm@openssh.com none
debug1: kex: curve25519-sha256@libssh.org need=20 dh_need=20
debug1: kex: curve25519-sha256@libssh.org need=20 dh_need=20
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 48:a8:22:da:b6:e6:63:83:5f:77:f3:c4:d8:4f:e9:ae
The authenticity of host '10.225.77.79 (10.225.77.79)' can't be established.
ECDSA key fingerprint is 48:a8:22:da:b6:e6:63:83:5f:77:f3:c4:d8:4f:e9:ae.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.225.77.79' (ECDSA) to the list of known hosts.
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/work/.ssh/id_rsa
debug1: Trying private key: /home/work/.ssh/id_dsa
debug1: Trying private key: /home/work/.ssh/id_ecdsa
debug1: Trying private key: /home/work/.ssh/id_ed25519
debug1: Next authentication method: password
wwf@10.225.77.79's password:
debug1: Authentication succeeded (password).
Authenticated to 10.225.77.79 ([10.225.77.79]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LC_MEASUREMENT = zh_CN.UTF-8
debug1: Sending env LC_PAPER = zh_CN.UTF-8
debug1: Sending env LC_MONETARY = zh_CN.UTF-8
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_NAME = zh_CN.UTF-8
debug1: Sending env LC_ADDRESS = zh_CN.UTF-8
debug1: Sending env LC_NUMERIC = zh_CN.UTF-8
debug1: Sending env LC_TELEPHONE = zh_CN.UTF-8
debug1: Sending env LC_IDENTIFICATION = zh_CN.UTF-8
debug1: Sending env LC_TIME = zh_CN.UTF-8
debug1: Sending command: scp -v -t /home/wwf/Documents/
Sending file modes: C0664 137543 uniq_fuids_0325.csv
Sink: C0664 137543 uniq_fuids_0325.csv
uniq_fuids_0325.csv 100% 134KB 134.3KB/s 00:00
scp: debug1: fd 0 clearing O_NONBLOCK
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 141372, received 2464 bytes, in 0.4 seconds
Bytes per second: sent 366276.4, received 6383.9
debug1: Exit status 0