ssh
我注意到,在Linux 服务器上执行单行命令时,~
,的值仍然是当地的用户的主目录,而不是远程用户的主目录。见证本地用户dotancohen
和远程用户atwood
:
$ whoami
dotancohen
$ ssh beta whoami
atwood
$ ssh beta ls ~/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh beta ls $HOME/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh atwood@beta ls ~/.ssh
ls: cannot access /home/dotancohen/.ssh: No such file or directory
$ ssh beta ls /home/atwood/.ssh
authorized_keys
$ ssh beta ls .ssh
authorized_keys
请注意,即使在连接详细信息中指定用户名,甚至使用$HOME
代替~
也无济于事。虽然我并不指望它们能起到作用,但还是值得一试。
如果需要的话,我在写单行代码时查找用户名没有问题.ssh/config
,但无法使用~
,但无法在脚本中使用则相当不方便。除了解析~/.ssh/config
用户名之外,还有其他方法可以解决这个限制吗?最后一个例子表明我可以认为我们在他的主目录中并引用与该目录相关的内容,但如果可能的话,我更愿意明确调用该目录。
如何通过 SSH 单行命令引用用户的主目录,而无需~/.ssh/config
在本地进行解析?
在本地系统 Kubuntu 14.04 和远程系统 Ubuntu Server 12.04、14.04 和 RHEL 6.5 上进行了测试。
答案1
你只需要将其转义,这样你的本地 shell 就不会扩展它:
ssh beta ls \~/.ssh
或者
ssh beta 'ls ~/.ssh'
那应该可行。