服务端主程序:/usr/sbin/sshd
客户端主程序:/usr/bin/ssh
/etc/ssh/sshd_config ssh服务端主配置文件
/etc/ssh/ssh_config ssh服务端主配置文件
服务器端的sshd_config文件的常见配置项
port 22 :配置监听端口
ListenAddress 【192.168.0.1 | 0.0.0.0】:配置监听地址,0.0.0.0是代表所有地址
protocol 2 :版本选择,默认选择2
HostKey /etc/ssh/ssh_host_rsa_key :ssh版本为2时rsa私钥保存位置,在etc/ssh目录下存储着本机ssh服务的相关的公钥和私钥,如下图
HostKey /etc/ssh/ssh_host_dsa_key :ssh版本为2时dsa私钥保存位置,在etc/ssh目录下存储着本机ssh服务的相关的公钥和私钥
ServerKeyBits 1024 : 私钥加密位数
SyslogFacility AUTHPRIV :表示要保存日志,在可以结合Rsyslog将sshd服务的日志单独存储,不再与系统中的其他与安全相关的日志存储在一起。
LogLevel INFO :设置日志等级为多少才进行记录
GSSAPIAuthentication no: 通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。
PermitRootLogin yes :允许root的ssh登录
PubkeyAuthentication yes :是否使用公钥验证
AuthorizedKeysFile .ssh/authorized_keys :指定公钥的保存位置
PasswordAuthentication yes :允许使用密码验证登录
PermitEmptyPasswords no:不允许空密码登录
RSAAuthentication yes :开启RSA验证
StrictModes yes :当远程用户的私钥改变时拒绝登录
MaxauthTires 6 :最大密码尝试数
Maxsessions 10 :最大终端数
私钥登录SSH
1、先配置你的sshd_config配置文件,配置项总共有如下几个:
(1)AuthorizedKeysFile .ssh/authorized_keys :这个定义了公钥文件的位置,.ssh这个目录一般在用户的家目录中。比如我们想要登录user1,那么user1的家目录中就要有对应的公钥文件
(2)PubkeyAuthentication yes:是否开启公钥登录
(3)PasswordAuthentication no:是否允许密码登录,我们如果开启了公钥登录一般不用密码登录了
(4)PermitEmptyPassword no : 是否允许空密码登录
(5)Strictmodes yes:当用户的私钥改变后不允许登录
最后重启服务
2、在想要进行远程登录的主机上生成公钥和私钥
(1)linux上输入:ssh-keygen -t 公私钥类型【RSA|ECDSA|ED25519】,建议选择后面两个,因为RSA相比起其他两个都已经显得落后了。我们在etc/ssh目录下就已经有生成好的关于RSA,ECDSA,ED25519的三对公钥和私钥.
ssh-keygen的用法
ssh-keygen -t rsa -b 4096 -f my_id -C "email@example.com"
其中:
- [-t rsa] 表示使用 RSA 算法。
- [-b 4096] 表示 RSA 密钥长度 4096 bits (默认 2048 bits)。Ed25519 算法不需要指定。
- [-f my_id] 表示在【当前工作目录】下生成一个私钥文件 my_id (同时也会生成一个公钥文件 my_id.pub)。
- [-C "email@example.com"] 表示在公钥文件中添加注释,即为这个公钥“起个别名”(不是 id,可以更改)。当我们打开公钥文件查看的时候会看见公钥的尾部有我们的注释信息,这样可以提醒我们这个公钥到底是做什么的.
该命令输入后会让你选择公私钥保存的位置,不输入的话就是保存在当前目录,还会让你输入使用私钥的密码,可以不输入,但是如果私钥被人拿了它就能随便登录服务器了。如果不额外指定密钥保存的位置,那么密钥的保存位置就是家目录下的.ssh目录下.
3、将生成的公钥上传到想要登录的用户的家目录下的./ssh目录中,改为.ssh/authorized_keys,
如果你将配置文件中的AuthorizedKeysFile xxx 这一项修改为了其他位置的其他名字的文件,那么公钥的上传位置也要修改,但是一般来说我们对于AuthorizedKeysFile 这一项是不会去修改它的,所以上传的位置也不做修改.
在上传公钥文件后,将./ssh目录的权限修改为700,authorized_keys文件的权限修改为600.保证这些公钥文件只有创建者能够查看,否则可能ssh的验证可能不起作用
4、进行最后的测试
(1)最后在客户端上测试是否能够登录,输入ssh user@ip_address 的方式即可.默认情况该命令后面会指定公钥的位置,当然我们也可以手工指定,手工指定需要使用-i选项进行指定,这个默认的位置在家目录下的./ssh下,所以我们将私钥放在./ssh目录下,我们在使用这个命令的时候就会自己将私钥文件上传给服务器去进行验证.
如果我们的测试端是windows,我使用的是Xshell,那么只要在Xshell上面输入ssh ssh服务器的IP,然后输入用户名,然后选择我们是密码验证还是公钥验证,我们选择公钥验证后将公钥文件拖进去即可.
如何将linux客户机上的公钥上传给SSH服务器?
我比较喜欢使用ssh的子工具-sftp,sftp默认的设置其实就差不多了,其实就是登录时提供的用户名以其用户的身份登录上去,然后提供一个平台去交换本机和sftp服务器,就相当于以这个用户的身份进行文件的操作.我们登录上去直接使用put命令直接上传即可,它的使用和lftp类似,但是它有一个lftp没有的命令就是lls,就是显示本地的目录,这个命令还算比较方便.
如果我们在服务器上做了密钥登录,sftp的登录也和普通的ssh登录一样,只要持有正确的私钥就能正确登录
如何将linux客户机上的私钥下载下来方便我们利用Xshell去登录SSH服务器
使用lrzsz这个工具,在Xshell命令行上输入"sz 私钥名",之后选择文件的保存路径即可.
RSA和ECDSA以及Ed25519三种算法的对比
常见的 SSH 登录密钥使用 RSA 算法。RSA 经典且可靠,但性能不够理想。
只要你的服务器上 OpenSSH 版本大于 6.5(2014 年的古早版本),就可以利用 Ed25519 算法生成的密钥对,减少你的登录时间。如果你使用 SSH 访问 Git,那么就更值得一试。
Ed25519 的安全性在 RSA 2048 与 RSA 4096 之间,且性能在数十倍以上。
RSA目前应用最普遍,也是最为经典的一个数字签名加密算法,但是签名长,
产生密钥很麻烦,素数产生技术受限制,难以做到一次一密。
ECDSA 发展势头猛,处在上升阶段,ECDSA算法是ECC+DSA的结合体,相较于RSA数字签名算法,速度快,强度高,签名短,前景乐观。