如何通过ssh登录服务器执行linux指令

如何通过ssh登录服务器执行linux指令,第1张

介绍如何在windows主机上通过ssh远程登录ubuntu操作系统,这里以虚拟机的操作系统为例讲解。方法/步骤

准备工作:首先需要在windows系统中安装虚拟机,并在虚拟机中安装好linux操作系统,这里安装的是vmware player虚拟机和ubuntu版本的操作系统。关于该部分的安装在作者的其他经验中有详细介绍。

在windows主机中安装上ssh软件,ssh是Secure Shell 的缩写,主要提供远程登录协议。windows下的安装很简单,只要下载好安装程序,双击即可安装。安装完成后会生成两个软件图标。

在ubuntu系统中安装ssh,通常ubuntu中默认是安装的。可以通过命令进行查看:dpkg -l | grep ssh

如果ubuntu系统中没有安装ssh程序,也可以使用下列命令进行安装:

sudo apt-get install openssh-client

sudo apt-get install openssh-server

安装好后ssh服务的启动和停止命令如下:

启动ssh服务:

#sudo /etc/initd/ssh start

停止ssh服务:

#sudo /etc/initd/ssh stop

重启ssh服务:

#sudo /etc/initd/ssh restart

通过虚拟机启动ubuntu系统,打开shell终端,通过ifconfig命令,查看该系统的ip地址,ssh的端口号一般为22

打开windows系统中的ssh客户端软件,选择快速连接,输入ubuntu系统的ip地址和账户名,并根据提示输入密码,即可通过ssh登录到ubuntu系统中去,并执行各种命令操作。

默认配置

Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:

ssh IP地址

一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:

ssh 用户名@IP地址 -p 端口号

如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。

密钥登录

每次登录SH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。

首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。

ssh-keygen

然后将本地公钥添加到服务器中,需要使用另一个命令:

scp -P 端口号 本地文件路径 用户名@远程服务器地址:远程路径

然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。

安装了远程系统资源管理器插件后,已经可以从 Eclipse 中直接登录远程服务器。这里要说的是如何使用现有的密钥或创建一个新的密钥,免口令建立 SSH 连接。这样做的好处是既省事又更安全。

使用现有的密钥

首先,到菜单 Window/Preferences

选择 General/Network Connections/SSH2

在这里,可以指定现有的 SSH2 密钥(必须是OpenSSH的标准)

提示:为了避免出现问题,更改SSH配置后,重新启动Eclipse。

创建一个新的密钥 (Key)

点选密钥管理 (Key Management) 标签窗口,创建一个新的密钥。

点击 Generate RSA Key 按钮,生成一个RSA密钥 。

然后:

添加 comment(inria-gforge-key, 通常可输入:user@host)

输入密码,并确认密码。(连接服务器时需输入一次该密码。如果是专用电脑,可以不设此密码)

复制公共密钥框中的内容,将此公共密钥粘贴到服务器上的 ~/ssh/authorized_keys 文件中去。

点击保存私钥 (Save Private Key) 按钮,把私钥保存在一个文件 id_rsa 中。

这样当再从 Eclipse 登录远程服务器时,就不需要服务器上的用户口令了。

登录流程

密钥登录比密码登录安全,主要是因为他使用了非对称加密,登录过程中需要用到 密钥对 。整个登录流程如下:

远程服务器持有公钥,当有用户进行登录,服务器就会随机生成一串字符串,然后发送给正在进行登录的用户。

用户收到远程服务器发来的字符串,使用与 远程服务器公钥配对的私钥 对字符串进行加密,再发送给远程服务器。

服务器使用公钥对用户发来的加密字符串进行解密,得到的解密字符串如果与第一步中发送给客户端的随机字符串一样,那么判断为登录成功。

整个登录的流程就是这么简单,但是在实际使用 ssh 登录中还会碰到一些小细节,这里演示一遍 ssh 远程登录来展示下这些细节问题。

生成密钥对

使用ssh-keygen就可以直接生成登录需要的密钥对。ssh-keygen是 Linux 下的命令,不添加任何参数就可以生成密钥对。

➜  ~ ssh-keygenGenerating public/private rsa key pairEnter fileinwhichto save the key (/home/jaychen/ssh/id_rsa):#1Enter passphrase (emptyforno passphrase):#2Enter same passphrase again:#3

执行ssh-keygen会出现如上的提示,在#1处这里提示用户输入生成的私钥的名称,如果不填,默认私钥保存在/home/jaychen/ssh/id_rsa文件中。这里要注意两点:

生成的密钥,会放在 执行ssh-keygen命令的用户的家目录 下的ssh文件夹中。即$HOME/ssh/目录下。

生成的公钥的文件名,通常是私钥的文件名后面加pub的后缀。

#2处,提示输入密码,注意这里的密码是用来保证私钥的安全的。如果填写了密码,那么在使用密钥进行登录的时候,会让你输入密码,这样子保证了如果私钥丢失了不至于被恶意使用。 话是这么说,但是平时使用这里我都是直接略过。

#3是重复#2输入的密码,这里就不废话了。

生成密钥之后,就可以在/home/jaychen/ssh/下看到两个文件了(我这里会放在/home/jaychen下是因为我使用 jaychen 用户来执行ssh-keygen命令)

➜  ssh ls

total 16K

drwx------ 2 jaychen jaychen 40K 12月  7 17:57

drwx------ 9 jaychen jaychen 40K 12月  7 18:14

-rw------- 1 jaychen jaychen 17K 12月  7 17:57 id_rsagithub

-rw-r--r-- 1 jaychen jaychen 390 12月  7 17:57 id_rsagithubpub

生成的私钥还要注意一点: 私钥的权限应该为rw-------,如果私钥的权限过大,那么私钥任何人都可以读写就会变得不安全。ssh 登录就会失败。

首次 ssh 登录

登录远程服务器的命令是

ssh 登录用户@服务器ip

这里开始要注意两个用户的概念:

本地执行这条命令的用户,即当前登录用户,我这里演示的用户名称是 jaychen。

要登录到远程服务器的用户。

在开始登录之前,我们要首先要把生成 公钥 上传到服务器。

公钥的内容要保存到 要登录的用户的家目录下的ssh/authorized_keys 文件中。假设你之后要使用 root 用户登录远程服务器,那么公钥的内容应该是保存在/root/ssh/authorized_keys中。注意authorized_keys文件是可以保存多个公钥信息的,每个公钥以换行分开。

上传完毕之后,执行

ssh root@远程服务器ip

这个时候,如上面说的,远程服务器会发送一段随机字符串回来,这个时候需要使用私钥对字符串进行加密。而这个私钥会去 执行该命令的用户的家目录下的ssh目录 读取私钥文件,默认私钥文件为id_rsa文件。即$HOME/ssh/id_rsa文件。假设在生成密钥的时候对私钥进行了加密,那么这个时候就需要输入密码。

上面的流程用户登录的时候是不会感知的,ssh 在背后完成了所有的校验操作,如果密钥匹配的话,那么用户就可以直接登录到远程服务器,但是如果是 首次登录 的话,会出现类似下面的提示:

➜  ssh ssh root@19216811The authenticityofhost'19216811 (19216811)' can't be establishedECDSAkeyfingerprintisSHA256:61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZgAre you sure you wanttocontinueconnecting (yes/no)

这句话的意思是,远程服务器的真实身份无法校验,只知道公钥指纹(公钥的 MD5 值)为61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg,是否真的要建立连接。出现上面的提示是因为避免存在 中间人攻击 。

中间人攻击

中间人攻击的前提是,你第一次登录一台远程服务器,你除了用户名、用户名对应的公钥私钥以及服务器 ip 之外,对远程服务器丝毫不了解的情况下。假设你 ssh 远程登录 19216811 的远程主机,在连接过程中被第三者拦截,第三者假冒自己为 19216811 的主机,那么你就会直接连接到其他人的服务器上。这就是中间人攻击。

为了避免中间人攻击,ssh 在首次登录的时候会返回公钥指纹,用户需要自己手动去 比对你要登录的远程服务器的公钥的公钥指纹和 ssh 返回的公钥指纹是否一样 。

经过比较公钥指纹,确认该服务器就是你要登录的服务器,输入yes之后就可以成功登录。整个登录流程结束。

known_hosts 文件

第一次登录之后,在本机的$HOME/ssh/目录下就会生成一个known_hosts的文件,内容类似下面

➜  ssh cat known_hosts19216811ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOPKYWolOYTDevvBR6GV0rFcI0z/DHZizN5l/ajApsgx+UcOOh51liuyBRRCIyF+BR56Le0lP0Pn6nzvLjbqMqg=

这个文件记录了远程主机 ip 和远程主机对应的公钥指纹,那么在下次登录的时候,远程主机发送过来的公钥指纹,直接和known_hosts文件中对应 ip 的公钥指纹比较即可。

config 配置

很多时候,我们开发可能需要连接多台远程服务器,并且需要配置 git 服务器的私钥。那么这么多的服务器不能共用一套私钥,不同的服务器应该使用不同的私钥。但是我们从上面的连接流程可以看到,ssh 默认是去读取$HOME/ssh/id_rsa文件作为私钥登录的。如果想要不同的服务器使用不同的私钥进行登录,那么需要在ssh目录下编写config文件来进行配置。

config的配置很简单,只要指明哪个用户登录哪台远程服务器需要使用哪个私钥即可。下面给出一个配置示例。

Host githubcom

           User jaychen

            IdentityFile ~/ssh/id_rsagithub

Host 19216811

             User ubuntu

IdentityFile ~/ssh/id_rsaxxx

上面config文件字段含义如下:

Host 指明了远程主机的 ip,除了使用 ip 地址,也可以直接使用网址。

User 指的是登录远程主机的用户。

IdentityFile 指明使用哪个私钥文件。

实现此的技术原理:

在内网通过域名绑定服务器,外网SSH访问连接时,通过域名的访问,实现访问内网LINUX。

具体的实现过程如下:

明确LINUX服务器内网访问地址端口,确保LINUX服务器正常开启SSH服务,在内网SSH可以正常访问连接。如图所示:

被访问端的Linux主机上使用nat123动态域名解析Linux版本。

在被访问端的Linux服务器安装nat123客户端,并登录使用它。

登录网页,左侧用户中心,添加域名解析,选择动态域名解析并添加确认。

选择动态域名解析记录,使用二级域名,或自己的域名。鼠标放在输入框有向导提示。如不理解负载均衡,不要勾选多点登录。

新添加动态解析后,等待几分钟生效。解析生效后,动态解析域名与本地公网IP是保持对应的。可以通过ping下域名核实,返回结果IP地址为本地公网IP地址时,表示动态解析生效正常。

路由器端口映射,路由映射SSH访问22端口。

因为公网IP是在路由器上的,外网访问时,需要经过路由,需要在路由器上做端口映射,将内网LINUX服务器访问22端口打通。路由器端口映射位置:转发规则/虚拟服务器/添加允许外网访问端口和协议。我的LINUX服务器SSH服务端口是默认的22,我内网对应LINUX服务器主机的内网IP地址是192168129。

外网访问时,使用动态解析域名。

在外网使用SSH访问内网LINUX服务器时,使用动态解析域名进行连接访问。域名是不变的,可以上网即可访问,再也不担心动态公网IP变化的问题。

首先进入/etc目录下,/etc目录存放的是一些配置文件,比如passwd等配置文件,要想使用ssh远程登陆,需要配置/etc/ssh/sshd_config文件里的配置信息,使用vim编辑,在命令行模式下输入 vim /etc/ssh/sshd_config,进入之后,按“i”进入编辑状态,在其文件里找到并修改为:PasswordAuthentication yes , PermitRootLogin yes两行即可,

修改之后,按“esc”退出,并按“:wq”保存并退出,或直接按“:x”直接保存退出,(注意:此处的x为小写x,大写X是将文件内容加密,使用时细心注意),

退出编辑模式之后,回到命令模式,输入 sevice ssh start/stop/restart/status,启动/停止/重启/状态,选择start启动ssh服务。

如果上面开启SSH服务的命令不能用,可以使用命令:sudo service sshd start 试试,检查是否开启SSH服务使用命令:ps -e | grep sshd

此时可以查看ssh状态是否为运行状态,运行状态即可使用ssh远程登陆。

使用“ifconfig”命令查询ip地址

使用ssh登陆时,输入主机(linux的ip地址),账号,密码登陆!

如果需要远程连接SSH,需要把22端口在防火墙上开放,关闭防火墙,或者设置22端口例外  /etc/initd/iptables stop

怎么通过ssh登陆可参看下一篇“通过ssh实现远程登陆服务器!”

大致步骤为:

SSH 服务配置文件位置

/etc/ssh/sshd_config

# 修改配置

PasswordAuthentication yes

PermitRootLogin yes

# 启动SSH 服务

sevice ssh start/stop/status

安装SSH:yum install ssh

启动SSH: service sshd start

设置开机运行: chkconfig sshd on

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何通过ssh登录服务器执行linux指令

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情