Linux 部署/配置

免密登录

免密登录的原理

通过 ssh 协议,生成的 非对称加密秘钥 进行连接,同步公钥到服务端,每次请求的服务器时,服务器验证是否存在公钥,会使用公钥加密一段信息传输到客户端,客户端在使用配对的私钥解密进行验证,从而验证客户端登录。

详细流程:

  • 在客户端使用 ssh-keygen 生成一对密钥:公钥+私钥
  • 将客户端公钥追加到服务端的 authorized_key 文件中,完成公钥认证操作
  • 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端
  • 服务端检索 authorized_key 文件,确认该公钥是否存在
  • 如果存在该公钥,则生成随机数 R,并用公钥来进行加密,生成公钥加密字符串 pubKey(R)
  • 将公钥加密字符串传递给客户端
  • 客户端使用私钥解密公钥加密字符串,得到 R
  • 服务端和客户端通信时会产生一个会话 ID(sessionKey),用 MD5 对 R 和 SessionKey 进行加密,生成摘要(即 MD5 加密字符串)
  • 客户端将生成的 MD5 加密字符串传给服务端
  • 服务端同样生成 MD5(R,SessionKey)加密字符串
  • 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功
  • 此时不用输入密码,即完成建连,可以开始远程执行 shell 命令了

生成秘钥

ssh-keygen 是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。生成过程中一直按 enter 即可。

常用的参数为:

  • -t: 指定生成密钥类型(rsa、dsa)。默认为 rsa
  • -f: 指定存放私钥的文件,公钥文件名为私钥文件名加.pub 后缀。默认为 id_rsa
  • -P: 指定 passphrase(私钥的密码),用于确保私钥的安全。默认为空
  • -C: 备注。默认为 user@hostname
# 生成秘钥
ssh-keygen -t rsa -C  "【生成密钥的名字】" -f  "【生成密钥的名字】_rsa"

上传公钥

ssh-copy-id - 将你的公共密钥填充到一个远程机器上的 authorized_keys 文件中。

  ssh-copy-id -i "【公钥文件名】" 用户名@服务器ip/域名

公钥上传到服务器后,会被添加到目录:~/.ssh/authorized_keys。

配置登录一定要设置公钥权限为 600

配置本地私钥

  • 把第一步生成的私钥复制到你的 home 目录下的.ssh/ 路径下

配置你的私钥文件访问权限为 600

chmod 600 【公私钥名称】

# 设置完查看,是否修改成功
ll

免密登录功能的本地配置文件

  • 先用生成的私钥登录一下,看有没有问题
ssh -i 【生成私钥名称】root@ip/域名
  • 能登录成功就说明,这已经配置好了,接下来可以配置简短的命令。

编辑本地机器的.ssh/ 路径下的 config 文件。如果没有 config 文件,则先创建 (touch config)

# 多主机配置
Host gateway-produce
HostName IP或绑定的域名
Port 22
Host node-produce
HostName IP或绑定的域名
Port 22
Host java-produce
HostName IP或绑定的域名
Port 22

# * 为通配符,匹配所有-produce 的服务器
Host *-produce
User root
IdentityFile ~/.ssh/produce_key_rsa
Protocol 2
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 20
LogLevel INFO

#单主机配置
Host 【登录时用的别名】
User 用户名
HostName IP或绑定的域名
IdentityFile ~/.ssh/【私钥名字】
Protocol 2
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 20
LogLevel INFO
  • 配置 config 文件的访问权限为 644

  • 测试一下

ssh 【Host名称】

搞定!🎉

查看本机密钥

ls -al ~/.ssh

终端设置用户代理全局

# 设置代理
$ export http_proxy="socks5://127.0.0.1:1080"
$ export https_proxy="socks5://127.0.0.1:1080"

$ git config --global http.proxy 'socks5://127.0.0.1:1080'
$ git config --global https.proxy 'socks5://127.0.0.1:1080'
$ git config --global https.proxy http://127.0.0.1:1080
$ git config --global https.proxy https://127.0.0.1:1080


# 取消代理
$ git config --global --unset http.proxy

$ git config --global --unset https.proxy

# 输出当前代理
$ echo $http_proxy
$ echo $https_proxy

以上也可以写成函数直接执行

  1. 查看 ss 的 sock5 端口
  2. 编写.bash_profile, 添加函数
  3. 更新.bash_profile
  4. 执行函数
$ vim ~/.bash_profile

# 在.bash_profile修改
function proxy_on(){
  export http_proxy='socks5://127.0.0.1:1086';
  export https_proxy='socks5://127.0.0.1:1086';
  echo -e "已开启代理"
}

function proxy_off(){
  unset http_proxt
  unset https_proxy
  echo -e "已关闭代理"
}

$ source ~/.bash_profile

# 开启代理
$ proxy_on

# 关闭代理
$ proxy_off

git 提交时设置代理(只针对当前用户)

$ git config --global http.proxy 'socks5://127.0.0.1:1080'
$ git config --global https.proxy 'socks5://127.0.0.1:1080'
Last Updated:
Contributors: kk