引子

近日海淘了一个 mini-PC:Gigabyte GB-BSRE-1605,此设备虽采用 amd 嵌入式低功耗处理器,性能相比现在自己所用的设备却有不小提升,加上先前升级电脑多余一些 ssd 和 ram,于是组了一个个人服务器,装上最新的 ubuntu 20.04 server 后,打算以后作为远程开发的基础主机。现记录一些开发环境配置过程,供参考。

设备无需连接显示器及键盘鼠标等输入设备,第一步,开启远程 ssh 登录。

原理

从客户端来看,ssh 提供两种级别的安全验证:

  1. 基于口令的验证:只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是登录验证流程:



    当第一次链接远程主机时,会提示你当前主机的”公钥指纹”,询问你是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。
  2. 基于密钥的验证:这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

条件

ssh 免登录实现的原理为 ssh 的公钥与私钥配对,此时无需输入登录密码进行认证。假设要从电脑 a 通过 ssh 免密码登录服务器 b,前提条件为:

  1. 服务器 b 需要运行 ssh 服务端程序,并且最好是作为开机自启动服务

  2. 电脑 a 可以运行 ssh 客户端程序,电脑 a 生成了 ssh 的公钥和私钥

  3. 服务器 b 欲登录用户存储了电脑 a 的公钥

步骤

下面分别说明如何实现上面的条件,以及一些注意事项。

  1. 如果服务器为 linux 或者 mac,一般都会自带 ssh 服务端,以 ubuntu 20.04 server 系统为例:





    并且默认开机启动

  2. 电脑如果为 linux 或者 Mac,一般也会自带 ssh 客户端,如果是 windows,可能要单独安装。ssh 公钥和私钥需要通过 ssh-keygen 工具生成,生成 ssh 公私钥的命令一般为 ssh-keygen -t rsa,也可以从其他地方拷贝后放到对应的目录,一般为 ~/.ssh 目录下。
  3. 通过 ssh-copy-id 工具将电脑 a 生成的 ssh 公钥传输到服务器 b,命令格式一般为 ssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer,其中 UserName 为服务器 b 的用户名,RemoteServer 为服务器 b 的 ip 或者域名。操作成功后,会将电脑 a 的 ssh 公钥追加到服务器 b 的用户 UserName 用户目录的 .ssh/authorized_keys 文件中
  4. 完成以上操作后,就可以在电脑 a 上通过 ssh 命令免密码登录服务器 b 了,命令格式一般为 ssh UserName@RemoteServer,也可以直接简写为 ssh RemoteServer

其他说明

ssh 免密登陆除了极少数情况下需要自己安装 sshd 服务端程序并配置 ssh_config 以外,经常遇到的问题其实是权限问题。

权限问题:

  1. 传输 ssh 公钥如果遇到一些权限报错,需要将个人主目录下 .ssh 目录及其目录下的文件设置为相应的权限:远程机器的 .ssh 目录需要 700 权限,authorized_keys 文件需要 600 权限

  2. 要正常进行 ssh 免密码登录,客户端机器下 .ssh 目录及其目录下的文件权限为:.ssh 目录需要 700 权限,id_rsa 文件需要 600 权限,其他文件为 644 权限

最后,ssh 免密登录如果需要管理的 ssh 目标主机太多,并且 ip 不是很好记忆,或者有多套 ssh 公私钥,可以通过 ssh config 实现通过别名快速登陆,通过 config 还可以实现流量转发等高级功能,实现远程服务本地调用,后面再详述。

参考资料:

  1. https://superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
  2. https://gist.github.com/grenade/6318301
  3. https://www.shellhacks.com/ssh-login-without-password/
  4. https://www.linux.com/training-tutorials/ssh-scp-without-password-remote-host-look-ma-no-password/
  5. https://www.jianshu.com/p/0f9b72d691c2
  6. https://deepzz.com/post/how-to-setup-ssh-config.html

ssh 免登录配置的更多相关文章

  1. Linux SSH免登录配置总结(转)

    转载请出自出处:http://eksliang.iteye.com/blog/2187265 一.原理 我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器Serv ...

  2. Linux远程登录ssh免密码配置方法(仅供参考)

    这篇文章主要介绍了linux远程登录ssh免密码配置方法,需要的朋友可以参考下(http://www.0834-3659999.com) 一.情景 公司刚上几台Linux,现在要把主机之间都能远程ss ...

  3. Linux实验:ssh免密码配置

    [实验目的]    1)了解ssh工具的作用    2)熟悉ssh配置过程    3)理解ssh原理[实验原理]    SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议.不同主机之间 ...

  4. Firefly安装ROS及ssh远程登录配置

    一.在Linux firefly 3.10.0 上安装ROS-indigo 快捷键 CTRL + ALT  + T 打开终端并安装ROS-indigo sudo sh -c 'echo "d ...

  5. 【mac】ssh免登录密码

    mac ssh免登录密码 在mac或者Linux上需要使用ssh登服务器,每次都需要输密码感觉很麻烦,搜了一下找到一个脚本,实践后发现可行. 1.创建脚本xx.sh $ vim xx.sh 输入: # ...

  6. LINUX的ssh免密码配置

    本篇将介绍LINUX的ssh免密码配置. 本篇中的有三台主机: 192.168.1.110 master.com.cn  主机192.168.1.111 salver1.com.cn192.168.1 ...

  7. centos 6.5 配置ssh免登录

    生成密匙: ssh-keygen -t rsa 会生成 id_rsa  id_rsa.pub id_rsa:私匙 id_rsa.pub:公匙 配置当前机器免登录: cp id_rsa.pub auth ...

  8. CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

    密钥登录步骤(免密码登录)ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,出于安全方面的考虑,介绍密钥认证方式登录到linux/unix的方 ...

  9. Debian9.5下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数

    密钥登录步骤(免密码登录)ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,出于安全方面的考虑,介绍密钥认证方式登录到linux/unix的方 ...

随机推荐

  1. VuePress plugins All In One

    VuePress plugins All In One VuePress & element-ui & docs $ yarn add -D vuepress-plugin-demo- ...

  2. 最新 Apple iPhone 12 价格 All In One

    最新 Apple iPhone 12 价格 All In One 美版价格 Apple iPhone 12 mini $699 Apple iPhone 12 $799 Apple iPhone 12 ...

  3. Flutter 1.17.x

    Flutter 1.17.x Flutter (Channel stable, v1.17.3, on Mac OS X 10.15.5 19F101, locale en-CN) https://f ...

  4. node mailer & email bot

    node mailer & email bot email https://nodemailer.com/about/ https://github.com/nodemailer/nodema ...

  5. React Native 三端同构

    React Native 三端同构 https://www.ibm.com/developerworks/cn/web/wa-universal-react-native/index.html rea ...

  6. nodejs package.json中的exports

    test/package.json { "name": "test", "main": "index.js", &quo ...

  7. django学习-21.优化表数据的标题展示

    目录结构 1.前言 2.表数据的标题默认展示的数据格式是[模型类名 object(主键名)]的相关信息 3.优化表数据的标题展示的数据格式是[改成我们想要展示的数据格式]的相关完整操作步骤 3.1.第 ...

  8. Linux文件/proc/net/tcp分析

    本文转载自Linux文件/proc/net/tcp分析 导语 /proc/net/tcp文件提供了tcp的连接信息,是由net/ipv4/tcp_ipv4.c中的tcp4_seq_show()实现信息 ...

  9. Java自学第2期——注释、数据类型、运算符、方法

    2.1.注释 注释用于说明某段代码的作用,某个类的用途,某个方法的功能,参数和返回值数据类型的意义等等: 注释非常非常非常重要,回顾代码时通过注释找回思路:团队沟通需要,让别人读懂你的代码,增加效率: ...

  10. 正则表达式匹配${key}并在Java中使用

    1.正则表达式匹配${key} \$\{([a-z]+)\} 能够匹配字符串中以${key}形式的文本(其中key为小写应为字母) .*\$\{([a-z]+)\}.* 可以用来检测文本中是否有${k ...