经常需要发包到远程 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,如果不出意外,就成功啦!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于