ssh程序分为客户端和服务端,利用ssh程序可以实现本地电脑安全连接远程主机。
名词解析:
- 客户端:作为访问者,运行在本地电脑的ssh程序
- 服务端:作为被访问者,运行在远程主机的ssh程序
- 本地电脑:泛指用户的电脑,例如:笔记本电脑
- 远程主机:泛指服务器,例如:阿里云服务器
安装 ssh 程序
- 客户端程序
sudo apt-get install openssh-client
- 服务端程序
sudo apt-get install openssh-server
服务端程序依赖客户端程序
生成密钥
- 执行生成密钥的客户端命令
ssh-keygen
(使用默认参数)
- 默认密钥路径:
~/.ssh/id_rsa
- 默认注释:空
- 根据提示输入指定的密钥文件路径(建议使用存放在默认目录
~/.ssh
) - 根据提示不输入密码短语(passphrase)
密码短语:
- 使用密码短语,以后每次使用密钥都会被询问输入密码短语,很麻烦,也难记。
- 如果使用密码短语,可以使用ssh-agent程序记住密码短语,避免每次被询问输入密码短语。
- 如果不用密码短语,要小心别人从你硬盘偷走私钥。
不用密码短语更简单,私钥被偷走的可能性很低
上传公钥到服务端
如果公钥路径为:~/.ssh/id_test.pub
,输入下面命令
ssh-copy-id -i ~/.ssh/id_test.pub -p 22 $user@$hostname
ssh-copy-id 会将公钥保存到远程主机的文件(
~/.ssh/authorized_keys
),如果没有这个文件,则自动创建。
~/.ssh/authorized_keys
是远程主机$user用户目录中的文件。
禁用密码登录服务端
修改服务端配置文件/etc/ssh/sshd_config
# 更改端口
Port 2222
# 禁止密码登录
PasswordAuthentication no
# 不能没有密码
PermitEmptyPasswords no
#
ChallengeResponseAuthentication no
登录服务端
密码登录:
ssh -p 2222 $user@$hostname
# 根据提示输入帐号和密码
私钥登录:
ssh -p 2222 -i /path/to/private-key $user@hostname
第一次连接的远程主机,ssh会“询问”你再次确认。确认后会将远程主机的信息保存在
~/.ssh/known_hosts
文件,以后的连接就不会再“询问”了。