• 安装

ssh全称Secure SHell,顾名思义意思是说更安全的shell。ssh是一种远程登录和远程执行命令的工具,实现了对远程执行命令的加密。
首先查看Linux是否安装了SSH:

$ ssh -V

如果输出类似下面则说明已经安装了OpenSSH。

$ OpenSSH_7.9p1 Raspbian-10, OpenSSL 1.1.1c  28 May 2019

如果输出不是这样,那么开始安装ssh。ubuntu上默认只安装了openssh-client。
安装client:

$ sudo apt-get install openssh-client

安装server:

$ sudo apt-get install openssh-server

查看sshserver是否启动:

$ ps -e | grep sshd

若输出类似:

$ 481 ttys000    0:00.00 grep sshd

则说明安装成功。否则,需要手动启动ssh。

$ service ssh start
  • 登录

安装完成后,通过ssh连接其他主机:

$ ssh [Host_name]@192.168.xxxx.xxx

然后会提示,输入远程主机的密码,输入后即可登录。接下来,就可对远程电脑进行操作了。其他高深的ssh技能用到的地方不多,其他的指令可以通过以下方式了解:

$ ssh --help

常用选项有:

-1 强制使用ssh协议版本1
-2 强制使用ssh协议版本2
-4 强制使用IPv4地址
-6 强制使用IPv6地址
-A 开启认证代理连接转发功能
-a 关闭认证代理连接转发功能
-b<IP地址> 使用本机指定的地址作为对位连接的源IP地址
-C 请求压缩所有数据
-F<配置文件> 指定ssh指令的配置文件,默认的配置文件为“/etc/ssh/ssh_config”
-f 后台执行ssh指令
-g 允许远程主机连接本机的转发端口
-i<身份文件> 指定身份文件(即私钥文件)
-l<登录名> 指定连接远程服务器的登录用户名
-N 不执行远程指令
-o<选项> 指定配置选项
-p<端口> 指定远程服务器上的端口
-q 静默模式,所有的警告和诊断信息被禁止输出
-X 开启X11转发功能
-x 关闭X11转发功能
-y 开启信任X11转发功能

如果出现以下内容:

Could not connect to ‘192.168.244.128’ (port 22): Connection failed.

说明,防火墙阻止了连接,关闭防火墙即可,具体方式自行搜索一下就好。

另一种登录方式,是公钥登录,其原理就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
首先,这种方式必须要求用户必须提供公钥,如果没有公钥,可以生成一个:

$ ssh-keygen

运行后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
此时,输入一下指令即可将公钥发送给远程主机的根目录下,此时会在需要输入一次远程主机的密码:

$ scp .ssh/idrsa.pub user_name@192.168.xxx.xxx:/home/user_name/

在目标Host主机上的操作,把拷贝过来的 id_rsa.pub 中的密匙写入 authorized_keys,并给与其 600 权限

$ cat id_rsa.pub >> .ssh/authorized_keys
$ sudo chmod 600 .ssh/authorized_keys

有时候会需要重启一下ssh

$ service ssh restart
  • 远程拷贝

scp是secure copy的简写,主要用于Linux进行远程跨主机拷贝文件。

命令格式:

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)的选项。

假设说,本机的IP为 192.168.0.105,远程主机的IP为192.168.0.215,此时,准备将本机/home/user_name1/Document下的a.cpp发送到远程主机的/home/user_name2/Desktop目录下,需要输入以下指令:

$ scp /home/user_name1/Document/a.cpp user_name2@192.168.0.215:/Desktop

如果是在IP为192.168.0.215的主机中,想远程拷贝IP为 192.168.0.105主机/home/user_name1/Document下的a.cpp文件,到本地/home/user_name2/Desktop文件夹下,输入以下指令:

$ scp user_name1@192.168.0.105:/Document/a.cpp /home/user_name2/Desktop

整个文件下的文件进行拷贝,和 cp 一样,参数加上 -r 就行,例如,本机IP为 192.168.0.105,拷贝/home/user_name1/Download文件夹下所有的文件,到IP为192.168.0.215的远程主机的/home/user_name2/Document文件夹下:

$ scp -r /Download root@192.168.0.215:/Document


本文只是列举了一些常用的ssh方法,不足之处,多多包涵。