Dan*_*rin 4 linux ssh bash shell
我.bash_profile
在 shell 初始化中设置了服务器的主机名。如何使用该变量作为 sshconfig
文件的一部分,如下所示:
.bash_profile
...
MY_SERVER='xxx.xxx.xxx.xxx'
...
Run Code Online (Sandbox Code Playgroud)
~/.ssh/config
Host my-host
User uname
HostName <MY_SERVER var here>
IdentityFile ~/.ssh/my-pem.pem
Run Code Online (Sandbox Code Playgroud)
我都试过了
HostName $MY_SERVER
Run Code Online (Sandbox Code Playgroud)
和
HostName ${MY_SERVER}
Run Code Online (Sandbox Code Playgroud)
但两者都会导致错误: ssh: Could not resolve hostname $MY_SERVER: nodename nor servname provided, or not known
有没有办法在不运行 shell 初始化脚本以将主机名注入配置文件的情况下执行此操作?
您不能直接执行此操作,因为 Bash 不会解析 SSH 配置文件。但是,您当然可以从 shell 的交互式登录资源文件(例如~/.bashrc)运行脚本或函数,该文件使用m4或sed创建~/.ssh/config文件。
注意:保持理智。如果您动态修改~/.ssh/config,最好从~/.ssh/config.orig或类似文件创建一个副本,而不是就地修改配置文件。
在运行时创建别名或函数来为您执行此操作更容易(也更安全),而不是尝试动态修改配置文件。列出和调试别名也应该容易得多,但您的里程可能会有所不同。以下各节中的别名示例。
最简单的方法是为每个唯一的主机名创建简单的别名。例如:
# ~/.bashrc
alias foo='ssh foo.example.com'
alias bar='ssh bar.example.com'
Run Code Online (Sandbox Code Playgroud)
-o
如果愿意,您也可以使用 ssh标志为每个别名添加自定义选项。ssh(1)手册页中列出了用法和可用标志选项。
更复杂的解决方案利用了 Bash 的:+
shell 参数扩展。如果已设置MY_SERVER变量,此方法将创建一个覆盖 HostName 选项的别名。例如:
alias ssh='ssh ${MY_SERVER:+-o HostName="$MY_SERVER"}'
Run Code Online (Sandbox Code Playgroud)
仅当设置了MY_SERVER时才会覆盖 SSH HostName 选项。例如,给定一个 Hostfoo
和一个 HostName foo.example.com
:
$ MY_SERVER=foo.example.com
$ ssh foo
Run Code Online (Sandbox Code Playgroud)
将扩展到:
ssh -o 主机名=foo.example.com foo
只需使用\ssh
或command ssh
在必要时直接运行 SSH 而无需扩展别名。
归档时间: |
|
查看次数: |
4862 次 |
最近记录: |