为了描述方便,进行如下定义:
目标机:被登录的机器为
客户机:登录的机器为
1、生成公钥和私钥:
在客户机,输入下列命令,敲击3个回车,本地客户端生成公私钥,生成到默认目录。
ssh-keygen -t rsa
默认目录是登录用户的家目录下的.ssh文件夹下,该文件夹默认隐藏。
cd ~/.ssh
ll -al
切换到生成目录后,可以看到创建的两个密钥:
id_rsa (私钥)
id_rsa.pub (公钥)
2、将公钥拷贝到要免密登录的目标机器上
这里测试用的目标机地址为:192.168.6.101
用户为:root
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.6.101
上面这条命令是写到目标机上的ssh目录下去了
在目标机上,切换到如下目录,查看内容
cd ~/.ssh
vim authorized_keys
可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。
3、免密登录
客户端ssh命令,就可以登录目标机了。
ssh root@192.168.6.101 或者 ssh 192.168.6.101
当客户机和目标机的用户名不一样时,需要指定远程登录的用户名
ssh root@192.168.6.101
当客户机和目标机的用户名相同时,用户名可以省略
ssh 192.168.6.101
4、SSH执行远程命令的两种方式
- 直接登录到目标机,进行命令执行,退出使用exit命令。
- ssh命令后,直接加需要执行的命令
ssh root@192.168.6.101 ls
- 通过上面第二种方式执行命令时,如果执行的的命令依赖于 /etc/profile 里面自定义的环境变量,比如jps,会报找不到命令的错误。这里涉及到Linux的LoginShell 和nologinShell两种登录模式的问题,这里不解释,直接记录解决方式。
编辑客户机用户目录下的.bashrc文件,在最后添加一行代码即可。
cd ~/
vim .bashrc
在文件最后添加如下一行代码
source /etc/profile
5、.ssh文件夹下(~/.ssh)的文件功能解释
文件 | 描述 |
---|---|
known_hosts | 记录ssh访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过得无密登录服务器公钥 |