通过公钥私钥访问机器

参考:SSH原理与运用(一):远程登录

在一台机器上要访问另一台机器,有两种方式:密码、公钥。

  • 通过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中只有一个大家都相同的公钥。

你可能感兴趣的:(通过公钥私钥访问机器)