zoukankan      html  css  js  c++  java
  • ssh test

    本文以以下需求为背景,介绍详细的做法:
    需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用)
    root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 git 命令操作
    nginx 用户进程(如 php-fpm)可在进程内附上预期的 SSH Key 进行 git 命令操作

    1. 生成多个 SSH Key

    以 root 身份登录服务器,为 root 用户和 nginx 用户分别生成 SSH Key。

    仓库 1:

    $ ssh-keygen -b 2048 -t rsa -f "~/.ssh/id_rsa_github_myrepo1"
    $ sudo -u nginx ssh-keygen -b 2048 -t rsa -C "nginx@localhost" -f "/var/lib/nginx/.ssh/id_rsa_github_myrepo1"
    

    仓库 2:

    $ ssh-keygen -b 2048 -t rsa -f "~/.ssh/id_rsa_github_myrepo2"
    $ sudo -u nginx ssh-keygen -b 2048 -t rsa -C "nginx@localhost" -f "/var/lib/nginx/.ssh/id_rsa_github_myrepo2"
    

    此处的 nginx 用户的主目录因操作系统不同而拥有不同的路径,经测试 CentOS 系的操作系统可能值为:

    "/var/lib/nginx"
    "/var/cache/nginx"
    "/usr/share/nginx"
    

    之其一,请读者执行

    sudo -u nginx ssh-keygen

    查看并以实际路径为准,替换本文中的对应命令的路径。如:

    [root@localhost]# sudo -u nginx ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/var/cache/nginx/.ssh/id_rsa):
    此处的 nginx 用户的主目录为 "/var/cache/nginx"。
    

    2. 获取 SSH Key 公钥

    将生成好的 SSH Key 的公钥部分添加到两个 Github 仓库设置的 Deploy Keys(部署密钥)中。

    仓库 1:

    $ cat "~/.ssh/id_rsa_github_myrepo1.pub"
    $ cat "/var/lib/nginx/.ssh/id_rsa_github_myrepo1.pub"
    

    仓库 2:

    $ cat "~/.ssh/id_rsa_github_myrepo2.pub"
    $ cat "/var/lib/nginx/.ssh/id_rsa_github_myrepo2.pub"
    

    3. 将不同的 SSH Key 与「主机名」对应起来

    编辑用户的 SSH 配置文件,并指定主机的详细自定义配置。

    root 用户:

    $ nano "~/.ssh/config"
    Host github.com-myrepo1
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_github_myrepo1
    
    Host github.com-myrepo2
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_github_myrepo2
    

    nginx 用户:

    $ nano "/var/lib/nginx/.ssh/config"
    Host github.com-myrepo1
        HostName github.com
        User git
        IdentityFile /var/lib/nginx/.ssh/id_rsa_github_myrepo1
    
    Host github.com-myrepo2
        HostName github.com
        User git
        IdentityFile /var/lib/nginx/.ssh/id_rsa_github_myrepo2
    

    4. 进行 git 命令操作

    完成了上述步骤,读者现在可以在 root 或 nginx 用户登录或以其运行的进程中执行 git 命令,并且会自动附上指定的 SSH Key。例如:

    $ git clone git@github.com-myrepo1:tommy/myrepo1.git "/var/www/myrepo1"
    $ git clone git@github.com-myrepo2:tommy/myrepo2.git "/var/www/myrepo2"
    

    PHP 运行于 nginx 用户的 php-fpm 进程时:

    <?
    header( 'Content-type: text/text' );
    exit( shell_exec( 'cd /var/www/myrepo1; git pull origin master 2>&1' ) );
    exit( shell_exec( 'cd /var/www/myrepo2; git pull origin master 2>&1' ) );
    

    额外补充

    修改 git 仓库地址

    git remote set-url <name> <newurl>
    git remote set-url origin git@github.com-myrepo1:tommy/myrepo1.git
    git remote set-url origin git@github.com-myrepo2:tommy/myrepo2.git
    

    修改know_hosts

    删掉,重新生成即可。

    rm -f ~/.ssh/know_hosts
    ssh -T git@github.com
    Hi Anonymous! You've successfully authenticated, but Github.com does not provide shell access.
    

    修改config权限

    Bad owner or permissions
    sudo chmod 600 ~/.ssh/config
    
  • 相关阅读:
    lightoj1027_数学求期望
    lightoj1232_完全背包
    2013 ACM/ICPC Asia Regional Chengdu Online
    数位DP专题
    状态压缩DP专题
    树形DP专题
    hdu 1198 Farm Irrigation
    hdu 4739 Zhuge Liang's Mines 2013 ACM/ICPC Asia Regional Hangzhou Online
    hdu 4745 Two Rabbits 2013 ACM/ICPC Asia Regional Hangzhou Online
    动态规划专题uva
  • 原文地址:https://www.cnblogs.com/HackerArt/p/9346419.html
Copyright © 2011-2022 走看看