1. 本地(win/mac)SSH 连接服务器 root 用户

参考链接:https://www.cnblogs.com/zydev/p/5779927.html

1. 本地生成公钥和私钥

  1. ssh-keygen -t rsa -C autodeployment -f id_rsa_deployment
  1. Generating public/private rsa key pair.
  2. Enter passphrase (empty for no passphrase):
  3. Enter same passphrase again:
  4. Your identification has been saved in id_rsa_deployment. # 私钥
  5. Your public key has been saved in id_rsa_deployment.pub. # 公钥
  6. The key fingerprint is:
  7. SHA256:iG7PLGiL9g1Y+JxzXLFyFl76A/9ysYrQzX6o9bpM+m4 autodeployment
  8. The key's randomart image is:
  9. +---[RSA 3072]----+
  10. | |
  11. | |
  12. | o . |
  13. | . ...* |
  14. | . ....OS |
  15. | =.o * * . |
  16. | . Bo+ . O. o |
  17. | oo.*+. BE++ |
  18. |o.oo o++=OBo |
  19. +----[SHA256]-----+

公钥私钥存放在 .ssh 目录下

2. 把本地公钥安装到服务器中

方式一:(推荐) 使用 ssh-copy-id 命令安装

通过ssh-copy-id将公钥复制到服务器的 ~/.ssh/authorized_keys 文件中

  1. ssh-copy-id root@172.17.0.4 # 需要输入密码(默认公钥)
  2. ssh-copy-id -i ~/.ssh/id_rsa_yangan root@172.17.0.4 # 复制自定义公钥

方式二:(不推荐) 进入服务器手动设定文件和目录的权限

  • 登录服务器,修改 .ssh/authorized_keys 文件,如果没有则创建一个
  • 把本地的公钥 id_rsa_deployment.pub 添加到 authorized_keys 文件中,可以执行下面的命令,也可以手动修改再上传 ```javascript cd ~/.ssh

cat id_rsa_deployment.pub >> authorized_keys # 这一步需要把本地公钥上传到服务器,可以手动修改再上传

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/243804/1631676353986-f6e9a310-335b-45fe-ab51-2837d4baeb13.png#clientId=u619f9cc7-f273-4&from=paste&height=174&id=Vgj5J&margin=%5Bobject%20Object%5D&name=image.png&originHeight=174&originWidth=838&originalType=binary&ratio=1&size=21645&status=done&style=none&taskId=u1c3064f7-22e3-466e-bf46-957cf9b798e&width=838)<br />如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
  2. ```javascript
  3. $ chmod 600 authorized_keys
  4. $ chmod 700 ~/.ssh

3. 本地连接 服务器

方式一:手动输入秘钥路径

  1. ssh -i ~/.ssh/id_rsa_deployment root@81.70.233.205

image.png
连接之后 本地 .ssh/known_hosts 会多一条记录
image.png

方式二:通过本地配置 .ssh config

修改 .ssh/config 文件,如果没有创建一个

  • 配置示例

    1. Host github.com
    2. User jaychen
    3. IdentityFile ~/.ssh/id_rsa.github
    4. Host 192.168.1.1
    5. User ubuntu
    6. IdentityFile ~/.ssh/id_rsa.xxx
  • 另一种方式 支持名字的映射

    1. #腾讯云 server
    2. Host tengxunyun # ssh 命令名字
    3. Hostname 81.70.233.205 # 服务器名称
    4. User root # 用户名
    5. PreferredAuthentications publickey # 秘钥方式
    6. IdentityFile C:\\Users\\\admin\\.ssh\\id_rsa_deployment # 使用的秘钥地址

    上面 config 文件字段含义如下:

  • Host 指明了远程主机的 ip,除了使用 ip 地址,也可以直接使用网址。

  • User 指的是登录远程主机的用户。
  • IdentityFile 指明使用哪个私钥文件。

ssh 连接

  1. ssh tengxunyun

image.png

方式三:直接使用 ssh userName:hostName 连接服务器

通过 ssh-add 将本地使用的私钥添加到由 ssh-agent 维护的列表中

  1. ssh-add ~/.ssh/id_rsa

执行 ssh root@81.70.233.205 即可直接登录服务器

  1. ssh root@81.70.233.205

image.png

2. B 服务器 通过 SSH 连接 A 服务器 root 用户

参考链接:https://juejin.cn/post/6844903906925871111
连接方式和本地连接大致相同

文件权限太大问题

如出现以下报错是,权限太大问题https://blog.csdn.net/qq_34691713/article/details/83987873

  1. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2. @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
  3. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  4. Permissions 0644 for '/root/.ssh/id_rsa_deployment' are too open.
  5. It is required that your private key files are NOT accessible by others.
  6. This private key will be ignored.
  7. Load key "/root/.ssh/id_rsa_deployment": bad permissions

执行以下命令给文件降级

  1. chmod 0600 ~/.ssh/id_rsa_deployment
  2. chmod 0600 ~/.ssh/id_rsa_deployment.pub

ssh-add 不允许执行问题

执行

  1. ssh-add ~/.ssh/id_rsa_deployment

报错

  1. Could not open a connection to your authentication agent.

则需要先执行以下命令,再执行 ssh-add

  1. ssh-agent bash

3. github action 通过 SSH 连接服务器 root 用户

参考链接:https://juejin.cn/post/6844903906925871111

  1. name: deploy for dev
  2. on:
  3. push:
  4. branches:
  5. - 'dev' # 只针对 dev 分支
  6. paths:
  7. - '.github/workflows/*'
  8. # - '__test__/**' # dev 不需要立即测试
  9. - 'src/**'
  10. - 'Dockerfile'
  11. - 'docker-compose.yml'
  12. - 'bin/*'
  13. jobs:
  14. deploy-dev:
  15. runs-on: ubuntu-latest
  16. steps:
  17. - uses: actions/checkout@v2
  18. - name: set ssh key # 临时设置 ssh key
  19. run: |
  20. mkdir -p ~/.ssh/
  21. # secrets.WFP_ID_RSA github里面设置的
  22. echo "${{secrets.ID_RSA_DEPLOYMENT}}" > ~/.ssh/id_rsa_deployment # 读取 secrets 存入 id_rsa_deployment 文件中
  23. chmod 600 ~/.ssh/id_rsa_deployment # 拥有者可读写 此文件
  24. ssh-keyscan "81.70.233.205" >> ~/.ssh/known_hosts #
  25. - name: deploy # 部署
  26. run: |
  27. ssh -i ~/.ssh/id_rsa_deployment root@81.70.233.205
  28. echo '登录成功'
  29. - name: delete ssh key # 删除 ssh key
  30. run: rm -rf ~/.ssh/id_rsa_deployment