ssh 无密码登录要使用公钥与私钥。linux下可以用ssh-keygen生成公钥/私钥对,现在,以服务器centos(ip地址192.168.1.240),客户端ubuntu的例子进行说明。
先确保所有主机的防火墙处于关闭状态
1.查看Server端(客户端为ubuntu)/home/用户/目录下是否存在隐藏目录".ssh"
在安装ssh完成后,进入/home/用户/目录,使用命令:ls -al 查看目录结构中是否存在隐藏目录“.ssh”
若存在,则操作正确,若不存在,解决方法如下:
①按照步骤一,重新安装一遍ssh服务
②若安装成功后还不存在".ssh"目录,则使用mkdir .ssh 在家目录下新建一个.ssh目录
一般来说,多数系统在安装完ssh服务后,默认都会自动建立“ssh”隐藏目录,只有少数需要手动创建。
2.在ubuntu下生成公钥/私钥对。
[chenlb@A ~]$ ssh-keygen -t rsa -P ''
chenlb是用户名,这里他是普通用户,A是主机名, ~表示当前在~目录下,即为/home/chenlb/下
-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。(否则,如图!需要三次回车,图为root用户登录,文本以chenlb普通用户登陆为例)
如果是普通用户登录,然后生成公钥,则默认存储在"/home/用户/.ssh"目录下。
如果是root用户登录,然后生成公钥,则默认存储在"/root/.ssh"目录下。
.ssh下有id_rsa(这个是私钥)和id_rsa.pub(这个是公钥)。
3.把ubuntu的id_rsa.pub的内容复制centos
如:想无密码登录root用户就复制到/root/.ssh/authorized_keys
想无密码登录其他用户就复制到/home/用户/.ssh/authorized_keys (以这种情况为例)
--------------------------------------------------------------
【tip】 ~代表你的/home/用户名目录
假设你的用户名是x,那么~/就是/home/x/
--------------------------------------------------------------
在ubuntu下发送
scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/ -->将公钥复制到远程服务器的~/目录下
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.240:~/(发送到服务器)
hadoop @192.168.1.240's password:
可以看到我们复制的时候需要我们输入服务器的密码,等我们把SSH配置好之后这些步骤就可以不用输入密码了。
这时,可以从命令行头部看出,已经到了服务器端,再输入命令是对服务器进行操作
在centos 下
(注意:如果是第一次运行SSH,那么.ssh目录需要手动创建,或者使用命令ssh-keygen -t rsa生成秘钥,它会自动在用户目录下生成.ssh目录。特别注意的是.ssh目录的权限问题,记得运行下chmod 700 .ssh命令)
--------------------------------------------------------------
【tip】cat file1 >> file2
将file1中的内容追加到file2中,即将file1内容合并到file2中,并不覆盖file2原来已有内容。
--------------------------------------------------------------
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys -->追加公钥到authorized_keys中
chmod 600 ~/.ssh/authorized_keys --> authorized_keys的权限设为600
登陆root用户在服务器上开启ssh服务认证功能,操作方法如下
vim /etc/ssh/sshd_config
取消这3行 前面的#注释符号
#RSAAuthentication yes #启用RSA认证
#PubkeyAuthentication yes #启用公钥私钥配对认证方式
#AuthorizedKeysFile %h/.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
service sshd restart -->重启ssh服务
exit -->退出
回到客户机来,输入:
ssh 用户@192.168.1.240 -->就能直接连接服务器咯。
如果本地用户名与远程用户名一致,登录时可以省略用户名。