什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为LinuxMac系统的标准配置。 SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

ps: 复制于互联网

SSH基本用法

SSH远程登录

口令登录

假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。

$ ssh user@host  # 如:ssh root@10.10.10.222

如果本地用户名与远程用户名一致,登录时可以省略用户名。

$ ssh host

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

$ ssh -p 7000 user@host

上面这条命令表示,ssh直接连接远程主机的7000端口。 如果你是第一次登录对方主机,系统会出现类似下面的提示:

$ ssh user@host
The authenticity of host 'host (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗? 所谓”公钥指纹”,是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。 很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。 如果用户决定接受这个远程主机的公钥。 那么输入YES。

Are you sure you want to continue connecting (yes/no)? yes

系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host, 10.10.10.222' (RSA) to the list of known hosts.

然后,会要求输入密码。

Password: (enter password)

如果密码正确,就可以登录了。

使用ssh在远程后台不中断地跑程序

LinuxUnix关闭ssh(关闭终端等)后运行的程序或者服务自动停止,如python3 test.py

nohup是永久执行

&是指在后台运行

解决:使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。

nohup python3 test.py &

scp跨机远程拷贝

scpsecure copy的简写,用于在Linux或者Unix下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会对速度有影响。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

scp命令参数

  • -1 强制scp命令使用协议ssh1

  • -2 强制scp命令使用协议ssh2

  • -4 强制scp命令只使用IPv4寻址

  • -6 强制scp命令只使用IPv6寻址

  • -B 使用批处理模式(传输过程中不询问传输口令或短语)

  • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

  • -p 留原文件的修改时间,访问时间和访问权限。

  • -q 不显示传输进度条。

  • -r 递归复制整个目录。

  • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

  • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。

  • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。

  • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。

  • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。

  • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,

  • -P port 注意是大写的P, port是指定数据传输用到的端口号

  • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

本地复制远程文件:(把远程的文件复制到本地)

scp root@10.10.10.222:/home/test/app/appssl/test.crt ~/test/test.crt
scp root@10.10.10.222:/home/test/app/appssl/test.crt ~/test/

远程复制本地文件:(把本地的文件复制到远程主机上)

scp ~/test/test.crt root@10.10.10.222:/home/test/app/appssl/test.crt
scp ~/test/test.crt root@10.10.10.222:/home/test/app/appssl/

本地复制远程目录:(把远程的目录复制到本地)

scp -r root@10.10.10.222:/home/test/app/appssl/ ~/test/

远程复制本地目录:(把本地的目录复制到远程主机上)

scp -r ~/test/ root@10.10.10.222:/home/test/app/appssl/