如何实现带变量的SSH登录脚本?支持指定服务器子目录
灵活适配多服务器的SSH登录方案(自动跳转指定目录)
我来给你两个实用的方案,完美解决你多客户端多产品的登录需求,不用一个个手动加别名,还能自动进入目标子目录~
方案一:Shell 函数(推荐,无需额外脚本)
直接把这个自定义函数加到你的Shell配置文件里(比如~/.bashrc或者~/.zshrc,取决于你用的是Bash还是Zsh),以后终端里直接敲命令就能用。
函数代码
# 自定义SSH登录函数,用法:sshlogin <product> <clientName> sshlogin() { # 先检查参数是否正确 if [ $# -ne 2 ]; then echo "💡 正确用法:sshlogin <产品名> <客户端名>" return 1 fi # 替换成你的固定配置 local fixed_username="你的固定用户名" local fixed_domain="你的固定域名" local auto_cd_dir="/path/to/your/target/subdir" # 要自动进入的子目录 # 拼接SSH命令,-t参数保证远程Shell保持交互,exec $SHELL避免登录后直接退出 ssh -t "$fixed_username@$2-$1.$fixed_domain" "cd $auto_cd_dir && exec \$SHELL" }
使用步骤
- 把上面的代码复制到你的
~/.bashrc(或~/.zshrc)文件末尾 - 保存后,在终端执行
source ~/.bashrc(或对应的配置文件)让修改生效 - 现在直接输入
sshlogin <product> <clientName>就能登录,比如:
这会自动帮你登录sshlogin web clientXYZssh yourname@clientXYZ-web.yourdomain.com,并且直接进入指定子目录。
方案二:独立可执行脚本(适合团队共享)
如果你不想修改个人Shell配置,或者需要把这个工具共享给团队成员,可以写一个独立脚本:
脚本代码
创建一个名为ssh-login的文件,内容如下:
#!/bin/bash # 检查输入参数 if [ $# -ne 2 ]; then echo "💡 正确用法:ssh-login <产品名> <客户端名>" exit 1 fi # 替换成你的固定配置 fixed_username="你的固定用户名" fixed_domain="你的固定域名" auto_cd_dir="/path/to/your/target/subdir" # 执行SSH登录并自动跳转目录 ssh -t "$fixed_username@$2-$1.$fixed_domain" "cd $auto_cd_dir && exec \$SHELL"
使用步骤
- 给脚本添加执行权限:
chmod +x ssh-login - 把脚本放到系统PATH目录里(比如
~/bin或者/usr/local/bin),这样任何终端都能直接调用 - 使用方式和函数一样:
ssh-login <product> <clientName>
额外优化建议
- 如果不同产品/客户端需要跳转到不同目录,可以在函数/脚本里加个条件判断,比如:
case $1 in web) auto_cd_dir="/var/www/html" ;; api) auto_cd_dir="/opt/api/service" ;; *) auto_cd_dir="/home/$fixed_username" ;; esac - 可以把固定的用户名、域名做成环境变量,比如在
~/.bashrc里export SSH_FIXED_USER="yourname",这样函数里直接用$SSH_FIXED_USER,修改起来更方便。
内容的提问来源于stack exchange,提问作者Christopher Ubøe
相关产品推荐
相关产品推荐

