SSH 教程笔记

多年前,我写下过一篇SSH 密钥登录教程,最近阅读了阮一峰老师的《SSH 教程》,又有了许多新的理解,特记录以下笔记内容。

SSH 登陆

密钥登录过程:
第一步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
第二步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
第三步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。

用指定加密算法生成密钥 ssh-keygen -t rsa/ecdsa
公钥末尾的[email protected]是公钥的注释,用于识别不同的公钥,表示哪台主机的哪个用户,并非必须项。

服务端的 authorized_keys 文件权限必须为644,否则 SSH 服务器可能会拒绝读取该文件。

使用命令 ssh-copy-id -i id_rsa user@host 自动将公钥上传至指定服务器,该命令中的公钥文件路径和.pub后缀名不是必须,ssh-copy-id 会自动在 ~/.ssh 目录里面寻找。

为了安全性,启用密钥登录之后,最好关闭服务器的密码登录。对于 OpenSSH,具体方法就是打开服务器 sshd 的配置文件 /etc/ssh/sshd_config,将 PasswordAuthentication 这一项设为 no。修改配置文件后,重启 sshd 以使配置生效。

1
2
3
4
5
6
7
8
9
10
11
# 禁止密码登录,只允许密钥登录
PasswordAuthentication no
# 禁止无密码登录
PermitEmptyPasswords no
# 禁止 root 用户通过密码登录,但允许通过密钥登录
PermitRootLogin prohibit-password
# sshd 监听的端口,允许监听多个端口
Port 22
Port 2122
# 是否允许公钥登录
PubKeyAuthentication yes

SSH 的证书登录

基于 SSH 的软件

SCP

-C 用于表示是否在传输时压缩文件。
-p 用于保留原始文件的信息,如修改时间,文件状态等。
-r 用于表示是否以递归方式复制目录。

rSync

-a 递归同步目录外,还可以通过原信息(如修改时间、权限、软连接等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以通常在执行rsync命令时使用-a参数。
rsync 同步时,目标目录不存在时,会自动创建。
rsync -a source destination 表示将源目录完整地复制到目标目录,即形成了destination/source的目录结构。
rsync -a source/ destination 表示将源目录下的内容完整的复制到目标目录,并不会在destination下创建source子目录。
--delete 为了使目标目录成为源目录的镜像副本,--delete 参数将删除只存在于目标目录、不存在于源目录的文件

rsync -a --exclude '*.txt' --exclude '.*' --exclude 'dir1/*' source/ destinationrsync -a --exclude {'*.txt', '.*' , 'dir1/*'} source/ destination--exclude 将用于排除掉某些文件或目录。注意,rsync 会同步以 “点” 开头的隐藏文件,如果要排除隐藏文件,可以这样写 --exclude=".*"
rsync -av --exclude-from='exclude-file.txt' source/ destination 如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用 --exclude-from 参数指定这个文件。

--include 参数用来指定必须同步的文件模式,往往与 --exclude 结合使用:rsync -av --include="*.txt" --exclude='*' source/ destination,排除所有文件,但是会包括 TXT 文件。

rsync 默认使用 SSH 进行远程登录和数据传输。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用-c(checksum)参数以后,则通过判断文件内容的校验和,决定是否重新传输。

--append 参数指定文件接着上次中断的地方,继续传输。
--append-verify 对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。
--existing--ignore-non-existing 表示不同步目标目录中不存在的文件和目录。
--ignore-existing 参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。
-m 参数指定不同步空目录。
--max-size 参数设置传输的最大文件的大小限制,比如不超过 200KB(–max-size=’200k’)。
--min-size 参数设置传输的最小文件的大小限制,比如不小于 10KB(–min-size=10k)。
--remove-source-files 参数表示传输成功后,删除发送方的文件。
-u--update 参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。

因为热爱,所以执着。