linux SFTP 命令

用法

连接

1
$ sftp username@remote ip(or remote host name)

如何使用域名进行连接,参考配置域名的方式;

上传

1
$ put /path/filename(本地主机) /path/filename(远端主机)

如果要将本地某个当前目录中的所有文件上传到服务器的当前目录,使用

1
$ put *

下载

下载单个文件

1
$ get /path/filename(远端主机) /path/filename(本地主机)

下载文件夹

要下载文件夹,使用-r;

1
$ get -r /path/dir /path/dir

执行本地和远程命令

当我们执行常规的 ls, rm, mkdir, dir, pwd 等命令都是对远端进行操作,只需要在这些指令前面加上一个前缀 l 便是对本地进行操作了,比如 lls,lcd, lpwd 等;比如

1
2
3
4
5
6
7
8
sftp> ls
bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt
opt proc root run sbin srv sys tmp usr var vmlinuz vmlinuz.old
sftp> lls
MATLAB_R2017a OmniGraffle_Pro_7.4.dmg ParallelsDesktop-12.2.1-41615_DH.dmg TeamViewer.dmg Visual_Thinking_with_IBIS_1.6.1.dmg
MATLAB_R2017a.zip OmniOutliner_Pro_v5.0.4.dmg ShadowsocksX-2.6.3.dmg Transmit 5.0b8.dmg clean_my_mac.dmg
Navicat Premium_12.0.8.dmg OmniPlan_3.7.2.dmg Sketch_45.2.dmg VanDyke.SecureCRT.SecureFX.v.8.1.2.zip iTools 2.9.1
OmniFocus-2.9.1.dmg OnyX.dmg Skype_mac_7.43.241.dmg VideoEditorMovieMatorPro230 Cr .dmg iTools64_mac_2.9.1.dmg

可以看到,ls 是对远程服务器进行操作,而 lls 是对本地文件进行操作;何其的方便… 还需要使用 tools?

日常使用

配置域名

通常 IP 是非常难以记忆的,我们可以通过使用本地的 hosts 文件来配置域名与 IP 的映射关系;

1
$ vim /etc/hosts

添加一个 entry

1
192.168.17.0   sample

这样,便可以使用域名进行连接了,

1
2
3
4
5
6
$ sftp root@macpeers
The authenticity of host 'macpeers (47.100.17.0)' can't be established.
ECDSA key fingerprint is SHA256:pQSjvo1RLgqqLbFrTgK+km+Z5EyItSEEuCcS61n6m94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'macpeers' (ECDSA) to the list of known hosts.
root@macpeers's password:

只是要注意的是,这个时候仍然需要对此域名添加一个本地证书;这个很好理解,因为域名可以对应多个 IP 地址;

连接错误

记录一次在日常使用过程中,SFTP 命令突然失效的问题;问题描述如下,将阿里云上的 Centos 系统更新为了 Ubuntu 系统,结果使用本地的 Transmit 无法通过 SFTP 命令进行连接了,
transmit failed.png
用户名和密码明明都是对的,却无法被远程服务器接收,搞了半天也不知道原因;最后,使用 SFTP 命令在本地尝试连接试试,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sftp root@192.168.17.0
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:pQSjvo1RLgqqLbFrTgK+km+Z5EyItSEEuCcS61n6m94.
Please contact your system administrator.
Add correct host key in /Users/mac/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/mac/.ssh/known_hosts:22
ECDSA host key for 192.168.17.0 has changed and you have requested strict checking.
Host key verification failed.
Connection closed

从日志中可以看到,是远程服务器的指纹发生了变化,于是,本地认为有人进行了 man-in-middle 攻击,于是拒绝连接;这才是问题的原因;Ok,最直接的办法就是将当前在 /Users/mac/.ssh/known_hosts 中所记录的服务器的信息给抹除,然后再保存一个新的;试试,

1
$ vim /Users/mac/.ssh/known_hosts

删除 192.168.17.0 主机的信息;然后再次使用 SFTP 命令连接试试,

1
2
3
4
$ sftp root@192.168.17.0
The authenticity of host '192.168.17.0 (192.168.17.0)' can't be established.
ECDSA key fingerprint is SHA256:pQSjvo1RLgqqLbFrTgK+km+Z5EyItSEEuCcS61n6m94.
Are you sure you want to continue connecting (yes/no)?

选择 yes,将证书保存到本地中,

1
2
3
4
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.17.0' (ECDSA) to the list of known hosts.
Connection closed by 192.168.17.0 port 22
Connection closed

要注意的是,证书保存到本地以后,连接便会立即断开;然后重新进行连接便是,

1
2
$ sftp root@192.168.17.0
root@192.168.17.0's password:

输入 root 对应的密码便可以登录了;

1
2
3
4
5
6
Connected to 192.168.17.0
sftp> ls
sftp> cd /
sftp> ls
bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt
opt proc root run sbin srv sys tmp usr var vmlinuz vmlinuz.old

平时使用 Transmit 习惯了,于是遇到点问题便无法解决;这倒是给我敲响了警钟呀;于是从今天开始,但凡是能够通过命令的方式绝不使用工具了;

ssh

如何设置 SSH 免密登录,查看