在一台机器上要访问另一台机器,有两种方式:密码、公钥。
-
通过ssh访问机器A时,如果你知道A机器的账号密码,则可以访问成功,但是你每次访问都必须输入密码,很麻烦,而且无法通过脚本自动化实现。如果不知道账号密码,还想访问呢,那么你可以通过公钥访问,这样好处可以不用每次访问都输入密码。
-
github也可以通过公钥访问的,如果你要往要给你自己的仓库提交代码,不想通过密码,你可以将你机器上的公钥信息在你的gitlab的设置中设置。
image.png
场景
在机器B上登录了zlcook账号,想通过scp命令将当前机器下的anyid.sh脚本传给机器C上/home/liang/anyid目录下,我知道c机器上的liang账号,但是我不想通过密码访问,为此,机器B的zlcook账号通过scp命令访问C的liang账号下目录,则需要配置公钥访问。
# 通过公钥让下面命令在B机器上的zlcook账号登录下执行成功
scp anyid.sh liang@c_ip:/home/liang/anyid
生成公钥私钥
- 在B机器zlcook账号目录下执行如下命令
- 命令:ssh-keygen
- 生成公钥私钥:当前账号的.ssh目录下
# 私钥文件
-rw-------. 1 zlcook zlcook 2622 4月 7 22:38 id_rsa
# 公钥文件
-rw-r--r--. 1 zlcook zlcook 582 4月 7 22:38 id_rsa.pub
设置公钥
- 将公钥文件放C机器的liang账号目录的.ssh目录中的authorized_keys文件里
- 通过账号密码登录机器C
- 如果liang账号目录下没有.ssh目录,则创建.ssh目录,并且要设置访问权限为700,并且要确认/home/zlcook的权限也为700
cd /home/liang
mkdir -p .ssh
# 不设置700,则A机器zlcook账号执行scp命令依然访问不了
chmod 700 .ssh/
- 如果.ssh下没有authorized_keys文件则创建。authorized_keys文件中存放了所有访问liang账号的公钥,authorized_keys文件权限要为600
touch authorized_keys
chmod 600 authorized_keys
- 将机器B上/home/zlcook/id_rsa.pub中的公钥追加到机器C,liang目录下的authorized_keys文件中。
$ cat id_rsa.pub > authorized_keys
- 大功告成,此时在机器B上登录zlcook账号执行下面命令就会成功, 前提是liang目录下要有anyid目录。
scp anyid.sh liang@c_ip:/home/liang/anyid
-
原理就是:zlcook账号下执行scp命令时,是走ssh协议,那么就会利用其/home/zlcook/.ssh目录下的私钥,而且机器C的/home/liang/.ssh/authorized_keys里包含了zlcook的公钥,所以访问时就可以取得信任。
-
扩展:如果你使用B机器上的wcc用户执行上面命令就会失败,因为liang目录下不包含wcc账号.ssh目录下公钥。一般为了方便,可以将同一份公钥私钥,在各个账号下和各个机器间进行复制,这样就可以很方便实现各个机器间的账号通过ssh无密码访问,且authorized_keys中只有一个大家都相同的公钥。
网友评论