SSH
远程登录服务器
ssh user@hostname
user
用户名hostname
IP地址或域名
之后再输入密码即可登录成功。
第一次连接服务器会让你确认是否登录,输入yes即可,这样会将该服务器的信息记录在~/.ssh/known_hosts
文件中。
ssh默认使用的是22号端口,如果配置成了其他端口可以ssh user@hostname -p 22
将22换成其他端口号
退出服务器
exit
和 ctrl + d
都可以退出
保存服务器信息
每次登录服务器都要ssh
输入user
和hostname
是有点繁琐的,我们可以保存服务器信息用一个别名替代。
具体操作如下:
在家目录进入.ssh
文件夹,如果没有直接mkdir .ssh
创建一个就行了。可以使用ls -a
查看是否有 .ssh
这个隐藏文件
创建一个叫config
的文件
在文件中写入以下代码:
Host myserver
HostName IP地址或域名
User 用户名
这样我们就可以用 别名(myserver
) 代替任何的 user@hostname
了。
我们也可以在文件里面写多个服务器信息:
Host myserver1
HostName IP地址或域名
User 用户名
Host myserver2
HostName IP地址或域名
User 用户名
ssh密钥(免密登录)
user@hostname
已经配置好了不用记了,那么password
是不是也有方法可以不用记呢?
我们可以使用ssh-keygen
生成一个密钥。输入ssh-keygen
之后,会有三个问题:
第一个问题是保存路径,回车默认就好,会保存在.ssh
文件夹中,
第二个问题是密钥密码,默认的话就是无密码。
第三个问题是确认密码。
进入.ssh
文件夹发现多了两个文件
id_rsa
私钥,不能随便给别人看id_rsa.pub
(public)公钥,无所谓随便给
为什么我要搞免密登录,还要多搞出来这几个密码呢?
我们需要再一次使用密码登录服务器,在服务器上保存我们的 ssh公钥,让服务器知道我们是知道密码的可信赖用户,之后就可以不用密码登录服务器了。
那么接下来进入服务器,在家目录下进入.ssh
文件夹,如果没有的话创建一个就行了。
将公钥中的内容,复制到服务器中的~/.ssh/authorized_keys
文件里即可。多个密钥的话记得使用回车隔开
到这里就成功了,我们ctrl + d
退出服务器,再重新ssh登录服务器试一下,发现直接ssh + 之前取得别名就可以登录了。
上面是具每一步骤的方法,我们也可以使用下面的命令一键式操作(生成密钥之后)。
ssh-copy-id user@hostname
,这里的 user@hostname
同样也可以使用别名代替,比如我之前设置的myserver
当然,第一次添加也是需要输入密码的
不登录运行服务器
我们在终端中使用ssh user@hostname 'command'
可以直接在服务器上跑后面的command
。
例如:
ssh user@hostname 'ls -a'
输出的是服务器中的ls -a
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'
输出的是服务器中计算的结果
SCP
通过ssh实现的文件复制命令,可以用于实现在不同服务器中传文件
命令格式:scp source destination
,将source
路径下的文件复制到destination
中
一般从服务器之间传文件可以从服务器传到本地,再从本地传到服务器,可以避免服务器相互之间的授权问题。
传文件
将source
路径下的文件复制到destination
中,这里的路径如果是其他服务器的话要写成user@hostname:路径
例如将终端内的a.txt
传到myserver
服务器的save
文件夹中,这里save
文件夹一定要存在不然会报错
scp a.txt myserver:save
默认相对路径是home
开始,这其实就相当于scp a.txt myserver:/home/save
也可以重命名,例如scp a.txt myserver:save/b.txt
传文件夹
-r
:如果是要上传文件夹的话需要在scp
之后加上-r
参数
例如:scp -r dir myserver:save
当然也可以重命名,如scp -r dir myserver:save/dir2
一次传送多个文件/文件夹
只要在source中空格隔开就行了
命令格式:
scp source1 source2 destination
多个source可以同时包含文件和文件夹,但是只要包含了文件夹就要记得加-r
参数
端口不为22
ssh
的默认端口是22,如果不是22的话我们可以使用-p
来指定端口
命令格式:
scp -P 22 source1 source2 destination