别名 ssh 后,不能 运行 显式 ssh 命令
After aliasing ssh, can't run an explicit ssh command
我有一个别名,用于从我的 mac machine 连接到我的 linux 盒子。
但是我注意到一些非常奇怪的事情,或者我可能是愚蠢的。
当我使用别名时它有效,但当我使用别名代表的内容时它不起作用。例如
bos-mp9ps:~ xyz$ alias ssh
alias ssh='ssh -A xyz@bos-lpaw1'
bos-mp9ps:~ xyz$ ssh -A xyz@bos-lpaw1
bash: xyz@bos-lpaw1: command not found
bos-mp9ps:~ xyz$ ssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-65-generic x86_64)
* Documentation: https://help.ubuntu.com/
429 packages can be updated.
0 updates are security updates.
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
You have new mail.
Last login: Tue Jan 3 10:29:27 2017 from 172.19.37.47
xyz@bos-lpaw1:~$
我还可以从私人家庭网络 ssh 进入我的 linux 盒子,但不能从 public 网络(如星巴克等)进入。你知道我是否需要为此做任何改变吗?
My /etc/hosts on linux machine looks like this:
bos-mp9ps:~ xyz$ cat /etc/hosts
# BEGIN hosts added by Pulse
23.79.238.45 vpn.company.com
# END hosts added by Pulse
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
当我使用我的 linux 邮箱的 IP 地址登录时,它没有帮助,它把我带到相同的位置
bos-mp9ps:~ xyz$ command ssh xyz@172.19.37.47
The authenticity of host '172.19.37.47 (172.19.37.47)' can't be established.
ECDSA key fingerprint is SHA256:MQwHj9JTw5d2Vzbz5h5hw2KxmhKmREVGIcrY+PrBxQc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.19.37.47' (ECDSA) to the list of known hosts.
Password:
Last login: Thu Dec 29 15:18:10 2016
Agent pid 971
bos-mp9ps:~ xyz$
感谢阅读
问题
ssh
是 'ssh -A xyz@bos-lpaw1'
的别名
所以
ssh -A xyz@bos-lpaw1
转换为
ssh -A xyz@bos-lpaw1 -A xyz@bos-lpaw1
所以这个命令试图由用户 xyz
在服务器 bos-lpaw1
.
上执行 "command" xyz@bos-lpaw1
解决方案
另一个别名
替换
alias ssh='ssh -A xyz@bos-lpaw1'
和
alias sshlpaw='ssh -A xyz@bos-lpaw1'
ssh
是一个非常 重要的程序,用别名覆盖它不是一个好主意。
使用命令防止别名
如果您需要不带别名的普通 ssh,您可以输入:
command ssh -A xyz@bos-lpaw1
在您的终端中。
使用.ssh/config
查看@amaurea 的精彩回答。
其他人已经回答了如何修复您的别名,但我认为最好的方法实际上是完全放弃别名并使用通常位于 ~/.ssh/config
中的 ssh 配置文件。为了匹配您的别名的作用,您可以在其中放入类似的东西(假设它使用的是 OpenSSH 或类似的东西):
Host linux
User xyz
HostName bos-lpaw1
ForwardAgent yes
有了这个,您将像这样登录到计算机:
$ ssh linux
(你可以给它任何你想要的主机别名,它不一定是 "linux")。
为什么要这样做?有几个优点:
- 由于您没有像原始别名那样对要登录的主机进行硬编码,因此您可以自由登录多台不同的计算机(但您可以通过为每台目标计算机创建一个别名来实现这一点,因此别名方法也可以支持这个)。
.ssh/config
中描述的主机别名也被 rsync
和 scp
识别。因此,您可以自动执行 rsync a.txt linux:b.txt
之类的操作,将 a.txt
复制到 linux 计算机并将其命名为 b.txt
.
为了能够从 public 网络通过 ssh 连接到您的计算机,您需要一种获取计算机 IP 地址的方法。您可以尝试使用 DNS 进行设置(尽管这可能很麻烦),或者如果您的 IP 不经常更改,您可以对其进行硬编码。当然,如果您使用 Network Adress Translation,您可能需要在 modem/router 上设置端口转发,以便将到您全局地址的传入连接转发到正确的本地计算机。
我有一个别名,用于从我的 mac machine 连接到我的 linux 盒子。 但是我注意到一些非常奇怪的事情,或者我可能是愚蠢的。
当我使用别名时它有效,但当我使用别名代表的内容时它不起作用。例如
bos-mp9ps:~ xyz$ alias ssh
alias ssh='ssh -A xyz@bos-lpaw1'
bos-mp9ps:~ xyz$ ssh -A xyz@bos-lpaw1
bash: xyz@bos-lpaw1: command not found
bos-mp9ps:~ xyz$ ssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-65-generic x86_64)
* Documentation: https://help.ubuntu.com/
429 packages can be updated.
0 updates are security updates.
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
You have new mail.
Last login: Tue Jan 3 10:29:27 2017 from 172.19.37.47
xyz@bos-lpaw1:~$
我还可以从私人家庭网络 ssh 进入我的 linux 盒子,但不能从 public 网络(如星巴克等)进入。你知道我是否需要为此做任何改变吗?
My /etc/hosts on linux machine looks like this:
bos-mp9ps:~ xyz$ cat /etc/hosts
# BEGIN hosts added by Pulse
23.79.238.45 vpn.company.com
# END hosts added by Pulse
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
当我使用我的 linux 邮箱的 IP 地址登录时,它没有帮助,它把我带到相同的位置
bos-mp9ps:~ xyz$ command ssh xyz@172.19.37.47
The authenticity of host '172.19.37.47 (172.19.37.47)' can't be established.
ECDSA key fingerprint is SHA256:MQwHj9JTw5d2Vzbz5h5hw2KxmhKmREVGIcrY+PrBxQc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.19.37.47' (ECDSA) to the list of known hosts.
Password:
Last login: Thu Dec 29 15:18:10 2016
Agent pid 971
bos-mp9ps:~ xyz$
感谢阅读
问题
ssh
是 'ssh -A xyz@bos-lpaw1'
所以
ssh -A xyz@bos-lpaw1
转换为
ssh -A xyz@bos-lpaw1 -A xyz@bos-lpaw1
所以这个命令试图由用户 xyz
在服务器 bos-lpaw1
.
xyz@bos-lpaw1
解决方案
另一个别名
替换
alias ssh='ssh -A xyz@bos-lpaw1'
和
alias sshlpaw='ssh -A xyz@bos-lpaw1'
ssh
是一个非常 重要的程序,用别名覆盖它不是一个好主意。
使用命令防止别名
如果您需要不带别名的普通 ssh,您可以输入:
command ssh -A xyz@bos-lpaw1
在您的终端中。
使用.ssh/config
查看@amaurea 的精彩回答。
其他人已经回答了如何修复您的别名,但我认为最好的方法实际上是完全放弃别名并使用通常位于 ~/.ssh/config
中的 ssh 配置文件。为了匹配您的别名的作用,您可以在其中放入类似的东西(假设它使用的是 OpenSSH 或类似的东西):
Host linux
User xyz
HostName bos-lpaw1
ForwardAgent yes
有了这个,您将像这样登录到计算机:
$ ssh linux
(你可以给它任何你想要的主机别名,它不一定是 "linux")。
为什么要这样做?有几个优点:
- 由于您没有像原始别名那样对要登录的主机进行硬编码,因此您可以自由登录多台不同的计算机(但您可以通过为每台目标计算机创建一个别名来实现这一点,因此别名方法也可以支持这个)。
.ssh/config
中描述的主机别名也被rsync
和scp
识别。因此,您可以自动执行rsync a.txt linux:b.txt
之类的操作,将a.txt
复制到 linux 计算机并将其命名为b.txt
.
为了能够从 public 网络通过 ssh 连接到您的计算机,您需要一种获取计算机 IP 地址的方法。您可以尝试使用 DNS 进行设置(尽管这可能很麻烦),或者如果您的 IP 不经常更改,您可以对其进行硬编码。当然,如果您使用 Network Adress Translation,您可能需要在 modem/router 上设置端口转发,以便将到您全局地址的传入连接转发到正确的本地计算机。