如何在连接到远程时自动“source ~/.bashrc”

如何在连接到远程时自动“source ~/.bashrc”

我需要在远程 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

相关内容