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

本贴最后更新于 2160 天前,其中的信息可能已经时过境迁

经常需要发包到远程 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,如果不出意外,就成功啦!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 脚本
    20 引用 • 147 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...