mac(linux)下使用ssh免密登录远程linux服务器

  |   0 评论   |   1,718 浏览

经常需要发包到远程linux的机器上去并部署,每次折腾起来挺麻烦的,又没有资源部署jenkins这样的ci工具,于是想写一个简单点的自动化打包-构建-部署一条龙脚本,其中最后一步涉及到需要scp本地打好的包到目标机器上去,然后ssh执行目标机器上指定的部署脚本(文件hash校验,程序包备份/替换,服务重启),如果没有做ssh免密登录,就需要每次执行一条龙脚本的时候在漫长的等待构建完成然后在scp和ssh的步骤时候输入远程服务器访问密码.同样挺操蛋的.于是就做一下ssh免密登录处理呗.

生成ssh-Key

使用ssh-keygen生成SSH-Key文件,命令为:
ssh-keygen -t rsa -C "example@washmore.tech"
按回车,会提示:

Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):

由于我本机有多个ssh-key,因此需要指定文件名而不是直接回车用默认的文件名,否则原有的ssh-key会被覆盖.
输入自定义文件名和路径~/.ssh/id_rsa_aliyun然后回车几次,当出现如下内容时候表示已经生成ssh-key:

+---[RSA 2048]----+
|           E.o o=|
|          o.= .+.|
|         . +.+. *|
|         .o +.ooO|
|        S .+oo.Bo|
|       .   +*o=.*|
|          ..+= B=|
|           .o.=.o|
|             oo. |
+----[SHA256]-----+

如果和我一样也需要在本地维护多个ssh-key,需要额外作如下步骤:
在/Users/yourname/.ssh目录下创建名为config的文件,然后填写类似如下内容:

Host host1
    HostName hostname1
    User git #登录远程机器的用户名
    IdentityFile ~/.ssh/id_rsa #默认的文件名

Host host2
    HostName hostname2
    User root
    IdentityFile ~/.ssh/id_rsa_aliyun
...

编辑完成后保存文件.

推送公钥到目标linux服务器

使用ssh-copy-id命令 将刚刚生成ssh-key对应的公钥(.pub文件)复制到远程机器的authorized_keys文件中,格式如下:

ssh-copy-id -i ~/.ssh/id_rsa_aliyun.pub  用户名@远程机器host

这一步需要输入用户名的登录密码.
成功后会出现类似如下提示:

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh '用户名@远程机器host'"
and check to make sure that only the key(s) you wanted were added.

验证

使用命令ssh 用户名@远程机器host尝试登陆远程linux,如果不出意外,就成功啦!

评论

发表评论