SSH常用配置

1. SSH客户端配置

1.1. 生成SSH密钥对:

ssh-keygen -t ed25519 -b 4096 -C "这是注释" -f ~/.ssh/test/key

  • -t rsa: 指定密钥的加密算法为ed25519, 它相比较于rsa有更高的安全性以及更好的性能。
  • -b 4096:指定密钥的位数, 不指定则使用默认的2048位。
  • -C "这是注释":为密钥添加注释。不添加则默认使用当前用户名和主机名组成的邮件地址, 比如 zhangsan@Ubuntu。
  • -f ~/.ssh/test/key:指定密钥文件的路径和名称, 不指定则会在执行命令后要求输入。

1.2. 配置~/config文件

  1. 一个简单的例子: 为Github指定使用的私钥
1
2
Host github.com
IdentityFile [私钥路径]

不要试图为github.com设置一个别名, 会导致无法推送代码, 并提示权限错误!

  1. 验证连接: ssh git@github.com -T
  • -T: 禁止分配伪终端, 防止出现”PTY allocation request failed on channel 0”的提示信息。
  • Bad permissions问题: windows用户需要检查config文件和私钥文件的安全权限不含当前用户以外的用户组; Linux用户需要确保文件权限为600(即其他用户无任何权限)。
  1. config文件的常用配置:
1
2
3
4
5
Host [别名]
HostName [域名或IP]
User [用户名]
Port [端口]
IdentityFile [私钥路径]

openssh官方文档: https://man.openbsd.org/ssh_config

1.3. 上传本地公钥文件

ssh-copy-id [-i identity_file] [-p port] [user@host]

  • -i identity_file: 指定本地公钥文件, 默认使用~/.ssh/id_rsa.pub
  • user@host: 指定远程主机的用户名和主机名。
  • [-p port]: 指定服务器端口

注意:[user@host]后面不得跟上任何参数,比如指定端口,会导致命令错误。

2. SSH服务端配置

2.1 允许root用户登录

Debian系的Linux发行版默认禁止root用户登录, 因此可修改sshd_config文件以允许root用户登录:

1
2
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config  # 允许root用户登录
systemctl restart ssh # 重启ssh服务

2.2. 配置内外网使用不同的用户登陆规则

以下配置将允许外网使用xiaoming的密码来登录服务器, 而内网无任何限制。
没有以下需求请勿配置!

1
2
3
4
5
6
7
8
# 对于外网中的特定用户,允许密码登录
Match Address *,!192.168.88.0/24 User xiaoming
PasswordAuthentication yes

# 对于外网用户,只允许密钥对登录
Match Address *,!192.168.88.0/24
PasswordAuthentication no
PubkeyAuthentication yes

3. 拷贝文件

3.1. SCP

命令语法:

1
scp [options] source  user@host:destination

常用选项:

-r: 递归地复制整个目录。
-p: 保留文件的修改时间和权限。
-q: 静默模式。使用这个选项,SCP命令在执行时不会打印任何信息。
-v: 输出详细信息。
-P: 指定 SSH 服务器的端口。

注意:选项必须放在源文件前面,否则会导致命令错误。

实例:

1
2
3
4
5
6
7
8
# 复制本地文件到服务器
scp mkbk.txt root@192.168.1.1:/root/

# 从服务器复制文件到当前路径
scp root@192.168.1.1:/root/mkbk.txt .

# 递归复制本地目录到服务器
scp -r /var/www root@192.168.1.1:/var

3.2. SFTP

命令语法:

1
sftp [-P port] [-i identity_file] user@host

注意:user@host 后面不能有选项。

常用命令:

ls: 列出远程目录的内容。
lls: 列出本地目录的内容。
cd path: 切换到远程系统中的其他目录。
lcd path: 切换到本地系统中的其他目录。
get file: 从远程系统下载文件。
put file: 上传文件到远程系统。
mkdir directory: 在远程系统中创建新的目录。
rmdir directory: 删除远程系统中的目录。
by: 结束SFTP会话。