我有3台计算机x
y
z
,其中z
只能通过x
和y
访问x
只能通过z
访问y
。
我想在机器~/.bashrc
的{{1}}中编写以下命令。
现在我正在按照步骤1,2进行SCP,并且工作正常,
将z复制到x
首先从y
scp z到yy
然后从y
scp到xscp root@192.0.44.4:/disk1/*.* ./
我想要做的是我想将它与单行bash功能结合起来,
即,sshpass -p root123 scp *.* root@1.2.60.4:/aaa/bbb/
z->y->x
将x复制到z
从y
scp x到yscpzx() { scp root@192.0.44.4:/disk1/{"$1"} ./ ;sshpass -p root123 scp "$1" root@1.2.60.4:/aaa/bbb/ }
从y
scp y到zsshpass -p root123 scp root@1.2.60.4:/aaa/bbb/*.* ./
我想要做的是我想将它与单行bash功能结合起来,即scp ./*.* root@192.0.44.4:/disk1/
x->y->z
我们将scpxz() { sshpass -p root123 scp root@1.2.60.4:/aaa/bbb/{"$1"} ./ ;scp ./{"$1"} root@192.0.44.4:/disk1/ }
= $1
传递给file1,file2,file3
和scpxz()
的位置。
任何帮助将不胜感激。
P.S。 scpzx()
x
y
台机器没有z
或ProxyCommand
又称nc
。
---- [编辑] ----
我希望传递多个分隔的文件,例如netcat
,以便它可以从{file1,file2}
以/disk1/
和/disk1/file1
读取它,只需单个文件就能正常工作只有不提供大括号/disk1/file2
但我希望它与{ }
一起,以便我可以传递多个文件名存在于同一个父目录/ disk1中,因为大括号会将它扩展到相同的父目录下,例如, { }
展开到scp /disk1/{file1,file2}
我也试过了,
scp /disk1/file1 /disk1/file2
但我收到的错误为 scpzx() { for i in "$@"; scp root@192.0.44.4:/disk1/"$i" ./ ;sshpass -p root123 scp "$i" root@1.2.60.4:/aaa/bbb/ ;}
答案 0 :(得分:1)
POST 1
如果未在脚本中创建,则此功能需要稍作更改。你必须添加一个“;”在最后一个“}”之前。我也会删除内部括号,因为在这种情况下它们并不是真的需要。
例如:
scpzx() { scp root@192.0.44.4:/disk1/"$1" ./ ;sshpass -p root123 scp "$1" root@1.2.60.4:/aaa/bbb/ ;}
POST 2
如果您希望循环使用命令行变量,则可以执行此操作。 $ @引用传递给函数的所有命令行变量。
fTest() { for i in $@; do echo "$i"; done ;}
对于您的脚本,它将类似于:
scpxz() { for i in $@; do sshpass -p root123 scp root@1.2.60.4:/aaa/bbb/"$i" ./ ;scp ./"$i" root@192.0.44.4:/disk1/; done ;}
答案 1 :(得分:0)
您可以尝试执行:
scp -3 x:path_to_file z:path_to_file
y
主机上的。 -3
切换确保所有转移都通过本地(在您的情况下为y
)主机。