获取ssh教程配套的远程服务器账号的信息
homework 4 getinfo
Homework0
进入 homework_0 文件夹
,要求:
1. 该文件夹内容为空
2. 配置服务器账号的密钥登陆方式。服务器信息可以通过如下命令获得:
3. homework 4 getinfo
将服务器账号的名称(Host)配置成:myserver
# 获得服务器信息
acs@7854cf6acd7f:~$ homework 4 getinfo
User:
HostName:
Password:
配置服务器别名
在~/.ssh
目录下创建文件:config
内容:
Host myserver
HostName
User
配置密钥登录
ssh-keygen
然后将 id_rsa.pub
内容全部复制到 myserver
中的 ~/.ssh/authorized_keys
文件里
或者通过如下方式一键生成:
ssh-copy-id myserver
Homework1
进入 homework_1
文件夹,下列描述中的“本地”均表示当前文件夹。要求:
- 在
myserver
服务器上创建并清空文件夹:~/homework/lesson_4/homework_1/
- 将本地的 main.cpp 文件上传到 myserver 中的
~/homework/lesson_4/homework_1/
目录中 - 在本地创建文件夹
dir
- 将
myserver
中的/etc/lsb-release
文件复制到dir
中
在myserver端
# 创建并清空文件夹
mkdir ~/homework/lesson_4/homework_1/ -p
mkdir xxx -p
是指没有该路径的时候就创建出来
在本地终端
# cp到服务器
scp main.cpp myserver:homework/lesson_4/homework_1
# 从服务器上cp下来
mkdir dir
scp myserver:/etc/lsb-release dir
Homework2
在myserver端
# 创建并清空文件夹
mkdir ~/homework/lesson_4/homework_2
在本地
# cp到服务器
scp -r dir myserver:homework/lesson_4/homework_2
Homework3
进入 homework_3 文件夹,下列描述中的“本地”均表示当前文件夹,要求:
在本地创建文件夹 dir
将 myserver 中的 /var/lib/locales/supported.d 文件夹下载到本地 dir 文件夹中
# 从服务器上cp下来
mkdir dir
scp -r myserver:/var/lib/locales/supported.d dir
Homework4
进入 homework_4
文件夹,编写脚本 remote_mkdir.sh
和 remote_rmdir.sh
,要求:
- 在
myserver
服务器上创建并清空文件夹:~/homework/lesson_4/homework_4/
- 本地目录下仅包含
remote_mkdir.sh
和remote_rmdir.sh
remote_mkdir.sh
和remote_rmdir.sh
具有可执行权限
4.remote_mkdir.sh
接收一个传入参数。格式为./remote_mkdir.sh directory_name
该操作可以在myserver
服务器上的~/homework/lesson_4/homework_4/
目录下,创建一个名为directory_name
的文件夹remote_rmdir.sh
接收一个传入传输。格式为./remote_rmdir.sh directory_name
该操作可以将myserver
服务器上的~/homework/lesson_4/homework_4/
目录下的名为directory_name
的文件夹删掉- 注意:传入的文件参数可能包含空格。两个脚本均不需要判断传入参数的合法性
Shell命令变量中的空格问题(用ssh执行)
ssh ser mkdir homework/lesson_4/homework_4/\"$1\" # 正确
ssh ser mkdir homework/lesson_4/homework_4/"'$1'" # 正确
ssh ser mkdir homework/lesson_4/homework_4/'"$1"' # 错误
- 如果shell命令(用ssh执行)中有空格,
变量
用双引号
引起来 - 最外层是
双引号
,内嵌单引号
,$
等特殊符号依旧可以识别 - 最外层是
单引号
,内嵌双引号
,$
等特殊符号无法识别
mkdir “my dir” -> mkdir my dir ->创建my和dir文件夹
mkdir"'my dir'" ->mkdir 'my dir'->创建my dir文件夹
ssh在执行命令时,会先在本地将命令解析,然后再将解析后的命令传到云服务端
比如:$1
带的有空格的参数tmp dir
,若执行ssh ser mkdir homework/lesson_4/homework_4/"$1"
命令,则在本地会先解析$1
,将tmp dir
视为一个字符串,命令解析为ssh ser mkdir homework/lesson_4/homework_4/tmp dir
再将此命令上传到云端服务器,这时只会创建一个名字为tmp
的文件夹,而不是tmp dir
了。因此我们要先将双引号""
转义,使得本地不会将$1
拆开
remote_mkdir.sh
#! /bin/bash
ssh myserver mkdir "homework/lesson_4/homework_4/'$1'"
remote_rmdir.sh
#! /bin/bash
ssh myserver rm -r "homework/lesson_4/homework_4/'$1'"