引子

近日海淘了一个 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. Linux Bash Script loop

    Linux Bash Script loop shell 编程之流程控制 for 循环.while 循环和 until 循环 for var in item1 item2 ... itemN do c ...

  2. Flutter CLI commands All In One

    Flutter CLI commands All In One Flutter run key commands. r Hot reload. R Hot restart. h Repeat this ...

  3. js console 性能测试 & don't-use-array-foreach-use-for-instead

    don't-use-array-foreach-use-for-instead slower https://coderwall.com/p/kvzbpa/don-t-use-array-foreac ...

  4. 动态规划算法 All In One

    动态规划算法 All In One dynamic programming leetcode https://leetcode.com/tag/dynamic-programming/ https:/ ...

  5. linux & node & cli & exit(0) & exit(1)

    linux & node & cli & exit(0) & exit(1) exit(0) & exit(1) demo exit(0) === OK exi ...

  6. css delete line text & html del

    css delete line text & html del html <del>¥720</del> demo <span class="ticke ...

  7. 国际标准时间格式ISO8601

    日期表示法 年由4位数字组成YYYY,或者带正负号的四或五位数字表示±YYYYY.以公历公元1年为0001年,以公元前1年为0000年,公元前2年为-0001年,其他以此类推.应用其他纪年法要换算成公 ...

  8. JVM必不可少的知识

    1.Java垃圾回收机制 对象被判断为垃圾的标准:没有被其他对象引用 2.判断对象是否可被回收 (1)引用计数算法 判断对象的引用数量 通过判断对象的引用数量来决定对象是否可以被回收 每个对象实例都有 ...

  9. Warning: Cannot update during an existing state transition (such as within `render`). Render 报错

    原来 修改(不用在构造函数里面定义)

  10. hadoop环境搭建:高可用

    目录 1.硬件配置 2.软件版本 3.准备工作 3.1.配置网络环境 3.2.安装JDK 3.3.安装ZOOKEEPER 4.安装Hadoop 5.启动 6.问题 7.配置文件 1.硬件配置 采用3台 ...