目录
Linux SSH登录的两种方式
使用密码验证登录
通常VPS或服务器开通后都是直接提供IP和root密码,使用这种方式就是通过密码方式登录。如果密码不够强壮,而且没有安装DenyHosts之类的防止SSH密码破解的软件,那么系统安全将存在很大的隐患。
如果你安装DenyHosts并设置邮件提醒,你每天可能会受到数封DenyHosts Report将前来破解SSH密码的IP加入/etc/hosts.deny。
使用密钥验证登录
基于密钥的安全验证必须为用户自己创建一对密钥,并把公有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找公有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“咨询”,并把它发送给客户端软件(putty,xshell等)。客户端收到咨询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。
生成密钥
因为puttygen生成的密钥有问题可能会出现:“Server refused our key”,最好使用XShell生成密钥或者在远程Linux VPS/服务器生成密钥。
在Linux远程服务器生成密钥
本文以openSSH来说明,目前大部分的Linux/unix都在使用这个程序。 默认情况下,openSSH的ssh-keygen使用的SSH2协议,并且生成RSA密钥对。
登录远程Linux VPS/服务器,执行:
[root@localhost ~]# ssh-keygen -t rsa // 先运行这个命令 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): // 直接回车 Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): // 输入密钥密码 Enter same passphrase again: // 重复密钥密码 Your identification has been saved in /root/.ssh/id_rsa. // 提示公钥和私钥已经存放在/root/.ssh/目录下 Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 2b:89:43:22:a9:57:6f:6a:1d:ee:fe:93:46:37:bc:28 root@localhost.localdomain The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | . | |o . o S. | |.. + o....+ | |. . oo=o.+ o | | . .+E.= . | | ..oo+.. | +-----------------+ [root@localhost ~]#
第3行是询问将生成的密钥对存放在哪里,直接回车存放在默认的位置就可以了。
第5行、第6行是让你输入口令短语,这个用于加密私钥的。如果你输入了,会使用它对私钥加密,这意味着你以后每次使用私钥,都要输入这个口令,用来解密私钥。无特殊要求下,这里留空。
其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa
如果不需要为公钥和私钥设置密码,运行命令 ssh-keygen -t rsa 后连续三次回车,即在远程服务器生成了公钥和私钥
将/root/.ssh/下面的id_rsa和id_rsd.pub妥善保存。
使用XShell生成密钥
Xshell是一款Windows下面功能强大的SSH客户端,能够按分类保存N多会话、支持Tab、支持多密钥管理等等,管理比较多的VPS/服务器使用XShell算是比较方便的,推荐使用。
略①
使用SecureCRT生成密钥
详情请参考:
secureCRT创建公钥截图:http://blog.lihaixin.name/2011/02/securecrt-create-public-key.html
将密钥添加到远程Linux服务器
1、使用scp命令将id_rsa.pub文件上传到/root/.ssh/下面。如果没有则创建此目录,也可以使用命令:
ssh root@192.168.0.23 "mkdir .ssh;chmod 0700 .ssh" # 需要输入密码,并重命名为:authorized_keys [root@localhost ~]# scp ~/.ssh/id_rsa.pub root@192.168.0.23:/root/.ssh/authorized_keys # 需要输入密码 # 如果是在Linux服务器上生成的密钥直接执行: mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys # 或者 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys # 将id_rsa.pub的内容追加到 authorized_keys 中,再执行: chmod 600 /root/.ssh/authorized_keys # 修改权限。
对于OpenSSH来说,我们需要将公钥加入到~/.ssh/authorized_keys中。每个公钥一行,千万注意不要换行,否则可能不能正常工作。
2、修改/etc/ssh/sshd_config 文件,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,保存。(此步可以省略)
3、重启远程服务器的sshd服务
Debian/Ubuntu执行
/etc/init.d/ssh restart
CentOS执行
/etc/init.d/sshd restart
客户端测试使用密钥登录
使用putty登录
略②
XShell登录
略③
Linux客户端登录测试
在Linux客户端执行:
chmod 600 /root/id_rsa # 再执行 ssh root@192.168.0.23 -i /root/id_rsa
/root/id_rsa为私钥文件,第一次链接可能会提示确认,输入yes即可,再按提示输入密钥密码,没有问题就会出现用户提示符。
以后你在这台机器上用scp ssh sftp 命令访问目标机器的时候就不用输入密码了。
配置多个私钥
我们在使用密钥的时候,肯定不会只使用一个密钥,我们有许多个不同的服务器,帐号不同,用户名不同,我们有多个私钥,因此我们需要管理这些密钥。
通过~/.ssh/config这个文件可以配置特定的主机,使用特定的私钥、用户名。
如果没有这个文件,那么创建它,并添加下面的内容,注意设置一下权限。
[root@localhost ~]# chmod 600 ~/.ssh/config [root@localhost ~]# cat ~/.ssh/config Host github.com *.github.com ProxyCommand connect -H web-proxy.oa.com:8080 %h %p IdentityFile ~/.ssh/privatekey/id_rsa.github User git
我们配置文件,
第一行Host指定了目标主机。
第二行ProxyCommand说明要使用代理去访问这个主机。
第三行IdentityFile指定私钥的路径,通过这个关键字这样就可以保存多个私钥了。
第四行User指明了用户。
另外,如果你不想写这个配置文件,那么可以在ssh命令中使用-i参数指定私钥的路径。
-i identity_file Selects a file from which the identity (private key) for RSA or DSA authentication is read. The default is ~/.ssh/identity for protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for protocol version 2. Identity files may also be specified on a per-host basis in the configuration file. It is possible to have multiple -i options (and multiple identities specified in configuration files). 1 ssh -i ~/.ssh/privatekey/id_rsa.github -T git@github.com
修改远程Linux服务器sshd服务配置
1、修改/etc/ssh/sshd_config 文件
将PasswordAuthentication yes 修改成 PasswordAuthentication no
2、重启sshd服务
Debian/Ubuntu执行
/etc/init.d/ssh restart
CentOS执行
/etc/init.d/sshd restart
再提醒一下一定要保存好Putty私钥文件id_rsa.ppk或Linux服务器下载下来的id_rsa私钥文件。
可能遇到的问题:
1、如果确认目录权限和密钥都没问题后,不管怎样都不能实现密钥登录时,那可能是SELinux引起的ssh公钥认证失败。具体分析过程可以参考:
SELinux引起的ssh公钥认证失败:http://www.cnblogs.com/qcly/p/3219535.html
附录:
1、略①②③请参考:
SSH密钥登录让Linux VPS/服务器更安全:http://www.vpser.net/security/linux-ssh-authorized-keys-login.html
扩展阅读:
ssh证书登录(实例详解):http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html
ssh非交互式密码授权(三):使用密钥进行认证:http://www.chenyudong.com/archives/ssh-using-private-public-key-no-password.html
ssh无密码访问:http://blog.csdn.net/codepeak/article/details/14447627 (主要参考authorized_keys文件实现多个密钥认证)
0 条评论。