今天在尝试登录一台用户机器的时候遇到一个大坑,通常ssh连接都是用的密钥对认证的方式,当要远程到一台机器的时候,需要先登记自己的公钥,然后申请一个登录权限,其实就是在远程的系统上创建一个以你当前使用的系统的用户名的用户,并开放ssh远程连接的权限,然后我们ssh连接机器的时候就可以通过ssh -p port ip
的方式登录到用户系统,以这个命令登录时会默认用你当前的用户名作为远程连接的用户账户,如果要指定其他用户登录可以使用ssh -p port username@ip
登录,因为第一次做运维,没有深入了解ssh的登录,以前自己用虚拟机做实验ssh远程登录的时候都是两台机器以root登录,然后用其中一台去ssh另外一台,没有更改默认的ssh端口22端口,所以就直接用ssh ip
命令登录系统,其实这条命令会被转换成ssh root@ip
方式去登录系统,所以登录后其实就是root用户,因为当前的机器是用的root用户登录,而被登录的系统中也有一个root用户,所以能够登录上去,但是如果当前不是root用户登录,而是用其他用户登录的话会出现两种情况。
-
第一种是被登录机器上有一个和当前系统使用的用户相同名称的用户
这种情况能够顺利的登录到被远程登录的机器系统,而且是以当前的用户名也是被登录的机器中与当前用户名相同名称的用户的账号登录。 -
第二种情况是被登录的机器上没有和当前系统使用的用户名相同的用户
这种情况就会登录失败,然后切换到root用户登录,然后再ssh到远程机器,或者用sudo ssh ip
登录到远程机器,这样也可以登录上去,这种方式是以root身份登录。
这是以ssh ip
的默认方式登录远程机器的方式,曾一度让我认为要切换到root用户才能使用ssh ip
这个命令登录,其实之所以能够用root身份以ssh ip
这个命令登录到远程机器是因为远程机器也有一个root用户(Linux系统必须有的一个用户),用root用户以ssh ip
命令登录远程系统的时候变成了ssh root@ip
这条命令,但是如果你用非root用户登录,那么就变成了ssh currentusername@ip
,如果对方的系统中没有当前使用的用户相同的用户账户就会登录不上,需要手动指定对方的用户名ssh username@ip
,这个username就代表对方系统中存在的用户名。
那有没有办法每次登录的时候都不用ssh username@ip
这样手动敲username呢?特别是在企业,用户名一般都比较长,敲起来特别麻烦,答案是有的。
- 在当前系统中的当前用户家目录下的.ssh文件中创建一个名为
config
的文件,完整目录~/.ssh/config
,然后在config
文件中写入以下内容:
Host *
User defaultName
通过写入这两行语句,以后每次执行ssh ip
都会变成ssh defaulName@ip
,就不用手动输入用户名了。
配置windows子系统
windows中很多Linux远程工具,例如putty,SecureCRT等,这些工具都非常好用,但是有些要收费,又不敢随便使用破解版,怕有后门,毕竟刚做运维,面对几万个节点的庞大系统还是要谨慎点的,以后熟悉了就可以随便玩了。
配置windows子系统的步骤:
- 在控制面板\程序\程序和功能中勾选Hyper-V,启用windows自带虚拟机,并重启系统。
- 在windows应用商店中搜索自己喜欢的Linux发行版系统并安装。
- 不出意外的话启动时会报错,需要点开报错信息提示url页面按操作执行一条powershell命令。
- 3步骤完成后启动刚刚安装的Linux系统,并且设置用户名。
- 更新源yum/apt等其他发行版的源。
- 安装ssh远程服务(Ubuntu/Debian)
apt-get install ssh
(RHEL/Centos)yum install -y ssh
。 - 生成密钥对
ssh-keygen
。 - 删除
~/.ssh/
目录下的私钥和公钥文件,复制当前windows中生成的私钥和公钥文件到当前Linux子系统的.ssh目录下 - 如何找到当前子系统的.ssh目录?百度/谷歌
- 完成配置