我需要在远程 Ubuntu 上创建一些别名并在 ssh 连接上启用它们。因此我在 ~/.bashrc 文件中定义了别名(在那个远程 Ubuntu 上)。
现在当我这样做
ssh root@<Remote IP>
source ~/.bashrc
我可以使用这些别名……但source ~/.bashrc
我也想自动化这个过程,而不是每次都手动执行。所以我尝试了
sshpass -p 'none' ssh -o StrictHostKeyChecking=no root@<Remote IP> -t 'source ~/.bashrc'
...但连接已关闭
如果我做
sshpass -p none ssh -o StrictHostKeyChecking=no root@<Remote IP> -t 'ssh root@<Remote IP>; source ~/.bashrc'
那么它并没有断开连接,但无法输入命令 - 输入时终端没有反应
那么如何用同一个命令连接到远程主机并加载 ~/.bashrc 呢?
答案1
当您这样做时ssh root@<Remote IP>
,您将获得 root 的登录 shell,它(假设它是 bash)将加载 /root/.profile(或 /root/.bash_profile,如果存在)。
因此,可能最干净的解决方案是确保文件来源.bashrc 文件(为 root 的登录 shell 提供与其非登录交互式 shell 相同的环境)。
默认的 Ubuntu ~/.profile
(从 复制/etc/skel/
)会自动执行此操作:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi