Git或SSH临时或永久更换目标主机笔记

Git或SSH临时或永久更换目标主机笔记

1. Git 相关操作

1.1 临时用法(两种等价写法)

1
2
3
4
5
# 方式一:环境变量(当前命令生效)
GIT_SSH_COMMAND="ssh -o HostName=NEW_IP_ADDRESS" git push -u origin

# 方式二:Git 临时配置项(当前命令生效)
git -c core.sshCommand="ssh -o HostName=NEW_IP_ADDRESS" push -u origin

1.2 永久用法

1
2
3
4
5
# 永久设置(全局,影响所有 Git 仓库)
git config --global core.sshCommand "ssh -o HostName=NEW_IP_ADDRESS"

# 永久设置(仅当前项目,在该仓库目录下执行)
git config core.sshCommand "ssh -o HostName=NEW_IP_ADDRESS"

1.3 查看配置

1
2
3
echo $GIT_SSH_COMMAND                # 查看环境变量
git config --get core.sshCommand      # 查看 Git 配置
git config --global --get core.sshCommand  # 查看全局配置

1.4 取消永久配置

1
2
3
4
5
# 取消全局配置
git config --global --unset core.sshCommand

# 取消当前项目配置
git config --unset core.sshCommand

2. SSH 相关操作

2.1 临时用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 方式一:直接使用新 IP
ssh root@NEW_IP_ADDRESS

# 方式二:使用 -o 临时覆盖配置项(最常用)
ssh -o HostName=NEW_IP_ADDRESS thc_1

# 方式三:同时覆盖多个参数
ssh -o HostName=NEW_IP_ADDRESS -o Port=2222 -o User=admin thc_1

# 方式四:完全绕过 config 文件
ssh -o HostName=NEW_IP_ADDRESS -o User=root -o Port=22 thc_1

2.2 "一次设置多次使用"的替代方案(类似 export)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 方案一:Shell 变量 + 别名(推荐)
export SSH_OPTS="-o HostName=NEW_IP_ADDRESS -o Port=2222"
ssh $SSH_OPTS thc_1
scp $SSH_OPTS file.txt thc_1:~
rsync -av $SSH_OPTS ./dir/ thc_1:~/dir/

# 方案二:临时别名(适合单次会话)
alias ssh-thc='ssh -o HostName=NEW_IP_ADDRESS thc_1'
ssh-thc
unalias ssh-thc

# 方案三:Bash 函数 + 环境变量(最接近 export 体验)
export THC_IP="NEW_IP_ADDRESS"
ssh_thc() {
    if [ -n "$THC_IP" ]; then
        ssh -o HostName="$THC_IP" thc_1
    else
        ssh thc_1
    fi
}
ssh_thc

# 方案四:全局别名函数(写入 ~/.bashrc 或 ~/.zshrc)
ssh_custom() {
    if [ -n "$SSH_CUSTOM_HOSTNAME" ]; then
        ssh -o HostName="$SSH_CUSTOM_HOSTNAME" "$@"
    else
        ssh "$@"
    fi
}
alias ssh=ssh_custom
# 使用:export SSH_CUSTOM_HOSTNAME="NEW_IP_ADDRESS" && ssh thc_1
# 恢复:unset SSH_CUSTOM_HOSTNAME && ssh thc_1

3. 错误写法(勿用)

1
2
# ❌ 这是在远程主机上执行 git push,不是本地临时换 IP
ssh -o HostName=NEW_IP_ADDRESS git push -u origin

4. 核心对比总结

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Git 临时(环境变量)
GIT_SSH_COMMAND="ssh -o HostName=IP" git push

# Git 临时(-c 参数)
git -c core.sshCommand="ssh -o HostName=IP" push

# Git 永久(全局)
git config --global core.sshCommand "ssh -o HostName=IP"

# Git 永久(项目)
git config core.sshCommand "ssh -o HostName=IP"

# SSH 直接临时
ssh -o HostName=IP thc_1

# SSH export 模拟
export SSH_OPTS="-o HostName=IP" && ssh $SSH_OPTS thc_1

5. 一句话记忆

  • Git:要改的是 Git 调用 SSH 的方式,不是自己手动执行 SSH
  • SSH:自己就是命令,直接加 -o 改参数
  • 永久 vs 临时:永久用 git config,临时用 GIT_SSH_COMMAND 或 git -c
  • SSH export 模拟:用 Shell 变量 + 别名/函数实现

6. 实用测试命令

1
2
3
4
5
# 测试 SSH 临时配置是否生效
ssh -o HostName=NEW_IP -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" thc_1

# 查看 SSH 实际连接的目标(不真正连接)
ssh -G thc_1 | grep hostname
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计