首页 » 系统管理 » 正文

Linux之SSH登录小谈

一直以来对Linux的SSH登录方式有种神秘感,它可以使用RSA配置无密码登录,可以从一台机器上跳到另外一台机器,也可以通过用户名和密码进行登录,还有的时候,公司的某些服务器,登录失败并不给用户机会输入用户名和密码,而是必须从跳板机或者堡垒机跳转到此台机器,禁止了这些机器的直接登录,这篇文章就简单说明下Linux的登录方式以及配置方式?

首先,Linux SSH登录支持多种方式,这些方式是有先后顺序的,前一种登录方式如果失败,SSH会自动尝试后面的方式,我们通过下面的命令可以查看一个Linux机器支持的登录方式:

robert@robert-ThinkPad-X200:~$ ssh -v localhost
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/robert/.ssh/id_rsa type 1
debug1: identity file /home/robert/.ssh/id_rsa-cert type -1
debug1: identity file /home/robert/.ssh/id_dsa type -1
debug1: identity file /home/robert/.ssh/id_dsa-cert type -1
debug1: identity file /home/robert/.ssh/id_ecdsa type -1
debug1: identity file /home/robert/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/robert/.ssh/id_ed25519 type -1
debug1: identity file /home/robert/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2 pat OpenSSH_6.6.1* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 41:61:9b:fb:b2:a2:6d:16:92:d8:4e:37:df:96:fb:f8
debug1: Host 'localhost' is known and matches the ECDSA host key.
debug1: Found key in /home/robert/.ssh/known_hosts:7
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/robert/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/robert/.ssh/id_dsa
debug1: Trying private key: /home/robert/.ssh/id_ecdsa
debug1: Trying private key: /home/robert/.ssh/id_ed25519
debug1: Next authentication method: password
robert@localhost's password: 

其中,这一行表示当前机器支持的认证方式:

debug1: Authentications that can continue: publickey,password

可见,当前机器支持publickey和password登录两种方式,前一种方式是通过配置RSA公钥和私钥的信任方式,在登录的时候不需要用户名和密码,后一种方式就是常见的登录的时候输入用户名和密码的方式。

我们可以在下面的文件修改登录方式,我们可以增加或者减少登录方式:

robert@robert-ThinkPad-X200:~$ sudo vim /etc/ssh/sshd_config

文件内容如下:

......
PubkeyAuthentication yes
......
UsePAM yes
......

这里,PubkeyAuthentication就是RSA信任方式的无密码登录,UsePAM认证方式包括PasswordAuthentication的方式。还有两种常见的认证方式,GSSAPIAuthentication和GSSAPICleanupCredentials,都是基于kerberos的强加密方式。

另外,这个配置文件里面还可以配置SSH的端口,默认是22,你可以更改为:

Port 10022

无论更改了认证方式,还是更改了端口,都需要重启SSH服务器:

service sshd restart

在客户端可以指定定制化的端口进行链接:

ssh -p 10022 localhost

另外,每个公司都有堡垒机或者跳板机,公司的服务器都是通过堡垒机和跳板机来跳转的,而不是直接登录的,这就是通过在服务器上禁止password的赋权模式,用户首先登录堡垒机或者跳板机,然后在堡垒机和跳板机与服务器之间使用RSA信任的方式,就可以实现直接不用输入密码跳转到你的服务器了。

通过RSA配置无密码登录命令如下:

1. ssh-keygen -t  rsa
2. ssh-copy-id -i ~/.ssh/id_rsa.pub  root@ip-address
3. ssh ip-address

前面第二步也可以使用如下命令替换:

客户端:scp id_rsa.pub user@ip/adress:/home/user
服务器:cat id_rsa.pub >> /home/user/.ssh/authorized_keys

前面第三步也可以使用如下命令替换:

ssh user@ip-address

这个user是第二步拷贝key的时候使用的那个用户的home目录(/home/user/.ssh), 如果当前机器登录用户和目标机器用户一致,则可以省略。

希望本篇文章能够帮助你理解SSH的登录方式。