当您运行不带 login_name 参数的 ssh 时,它会自动使用您的本地用户名作为 login_name。例如:
cogan@localhost$ ssh myserver
cogan@myserver's password:
有没有办法强制 ssh 提示输入 login_name?
答案1
如果你说的是 OpenSSH,答案是否定的(你可以检查来源)。正如@cnicutar 指出的那样,你可以使用ssh user@host
或配置别名,如下.ssh/config
所示
Host meh
HostName foo
User bar
进而ssh meh
。
答案2
由于ssh
没有强制用户名提示的选项;您可以在目录中创建以下脚本~/bin
并将其命名ssh
:
#!/usr/bin/perl
my $user_at_address = $ARGV[0];
my @u_a = split(/@/, $user_at_address);
if (defined $u_a[1])
{
if ( $^O == 'linux' )
{
exec ("/usr/bin/ssh $u_a[0]\@$u_a[1]");
}
if ( $^O == 'solaris' )
{
exec ("/usr/local/bin/ssh $u_a[0]\@$u_a[1]");
}
}
else
{
print "Enter your username: ";
my $username = <STDIN>;
chomp ( $username );
if ( $^O == 'linux' )
{
exec ("/usr/bin/ssh $username\@$u_a[0]");
}
if ( $^O == 'solaris' )
{
exec ("/usr/local/bin/ssh $username\@$u_a[0]");
}
}
然后,使脚本可执行:
chmod 755 ~/bin/ssh
确保您有$HOME/bin
(PATH
放入export PATH=$HOME/bin:$PATH
您的~/.bashrc
或/etc/bashrc
和source ~/.bashrc
或source /etc/bashrc
)。
然后,按照需要运行它ssh
:
[ 12:49 jon@hozbox ~ ]$ ssh localhost
Enter your username: bob
bob@localhost's password:
[ 12:50 bob@hozbox /home/bob ]$
答案3
这是@meh 的回答的改编。
在 shell 脚本中,我们提示用户名。
我们在随后的 ssh 调用中传递用户名。
以下内容运行uptime
于contosso.com
:
sshhost=contosso.com
read -p "$sshhost user [$USER]: " sshuser
[ "$sshuser" == "" ] && sshuser=$USER
ssh $sshuser@$sshhost uptime
以下是示例输出:
$ ./run-script.sh
contosso.com user [stephen]: billgates
[email protected] password:
10:57:12 up 71 days, 1:01, 2 users, load average: 0.00, 0.04, 0.05
$
答案4
在 Windows 批处理中:
echo off
echo Please type your SSH username.
set /p usern
ssh -t %usern%@serveripaddress