SSH命令和原理及SSH衍生SCP, SFTP命令

2,741 阅读3分钟

SSH,全称为Secure SHell安全外壳协议,是一种加密的网络传输协议。SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。linux上就是使用的OpenSSH。SSH常用来开通加密传输隧道,所以很多其他常用的命令都可以通过SSH加密传输,如cp加密为scp,ftp加密为sftp。 SCP,全称为Secure copy安全拷贝,用于在Linux下进行远程拷贝文件的命令。 SFTP,全称为Secure File Transfer Protocol安全文件传输协议,

讲解SSH命令前,简单理解SSH原理。既然SSH是加密的网络传输协议,那么,SSH登录时是怎么保证密码的安全性呢?

其实,SSH登录时是使用非对称加密算法RSA进行加解密,由于RSA计算过程复杂,耗时较长,所以登录后SSH客户端和服务器之间数据传输是约定了相同的密钥进行对称加解密,提高效率。

我们知道,SSH登录有两种方式:口令登录、公钥登录。两种方式登录过程大致如下: 口令登录

  1. 客户端请求登录服务器,服务器发送自己的公钥到客户端
  2. 客户端使用服务端的公钥加密密码,发送密文到服务端
  3. 服务端接收密文,使用自己的私钥解密密码
  4. 服务端验证密码,返回登录结果

公钥登录

  1. 客户端生成自己的公钥私钥,将公钥给到服务端(服务端保存在.ssh目录)
  2. 客户端请求服务端,服务器生成随机数并使用客户端的公钥加密,发密文给客户端
  3. 客户端收到密文,用自己的私钥解密,做摘要后发送给服务端验证
  4. 服务端验证,返回登录结果

以上流程涉及到的公钥私钥保存在如下图目录。

.ssh目录

SSH命令

ssh username@remote_ip:登录远程主机,默认22端口,如果服务器不是22端口,可以使用-p指定其他端口。
ssh -D local_port username@remote_ip:-D表示动态代理,绑定本地local_port端口,发向该端口的请求都将发到远程主机,就好像你在远程主机上执行该请求一样。结合chrome的aotu-proxy、switchyOmega等代理插件,使用这些插件将浏览器请求导到local_port,协议为sock5,可以实现fq。
ssh -L local_port:third_ip:third_port username@remote_ip:本地端口转发,可以将访问本地端口loca_port的数据通过远程主机remote_ip,转发到第三方主机的端口,third_ip:third_port,如果third_ip为127.0.0.1,则表示访问远程remote_ip的指定端口third_port。使用该功能可以实现防火墙穿透。
ssh -R remote_port:third_ip:third_port username@remote_ip:远程端口转发,可以监听远程的remote_port端口,将端口的数据通过remote_ip主机转发到third_ip。
ssh -NfC username@remote_ip:-N表示不执行命令,用于端口转发,-f表示后台运行,-C表示开启数据压缩

SCP命令

scp local_file username@remote_ip:remote_folder或者scp local_file username@remote_ip:remote_file:基本用法,用于复制文件到远程,改变位置也可以从远程复制文件到本地。 scp -r local_folder remote_username@remote_ip:remote_folder:复制目录

SFTP命令

sftp是一个加密的、交互式的类似于ftp的文件传输程序。使用sftp登录远程后,sftp有两套相似的命令,可以同时操作远程和本地目录。 sftp [-P port] username@remote_ip:登录服务器,登录有进入交互界面,sftp>。
pwd和lpwd:pwd显示远程当前目录,lpwd显示本地当前目录,所有命令前加l表示local本地。
ls和lls:ls显示远程当前目录下的东西,lls显示本地
get file.sub:下载文件到本地
put file.sub:上传文件到远程

以上。

参考资料

  1. 端口转发:cherrot.com/tech/2017/0…
  2. ssh选项:linux.51yip.com/search/ssh