使用ssh登录到远程服务器
ssh user@01.01.03.04 -i /path/to/ppk.key
然后运行
[user@ip-01-01-03.04 ~]$ sudo su -
[root@ip-01-01-03.04 ~]# for curdir in $(dir /); do echo "fil=$curdir" ; done
有效列出所有根目录:
fil=bin
fil=dev
fil=lib
但是尝试从远程进行操作以在本地检索结果对我来说很棘手:
ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir \/); do echo "fil=$curdir" ; done'"
给予:
fil=var
fil=var
fil=var
(...)
和
ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir \/); do echo "fil=\$curdir" ; done'"
给予
fil=
fil=
fil=
(...)
答案 0 :(得分:1)
另一种方法呢?您无需root就可以列出/。因此,无需使用sudo或ssh进行root。另外,由于您实际上只想在远程服务器上获得/的列表,所以为什么不只使用ssh并运行dir命令呢?循环然后可以是局部的。像这样吗?
for curdir in $(ssh localhost dir /); do
echo "fil=${curdir}"
done
希望这会有所帮助
答案 1 :(得分:1)
双引号内的变量由本地外壳扩展,因此您需要像在第二个版本中那样转义美元符号。
此外,双引号内的双引号将终止字符串,您还需要对其进行转义。
顺便说一句,不需要逃脱/
。
ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir /); do echo `"fil=\$curdir`" ; done'"
使用here-doc通常更容易编写:
ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk <<'EOF'
sudo -i -u root bash -c 'for curdir in $(dir /); do echo "fil=$curdir" ; done'
EOF
在EOF
标记周围加上单引号会将此处文档视为单引号字符串,因此$
不会被特殊对待。