我想使用ssh在远程服务器上创建文件,但我无法这样做。我有3个远程服务器,我正在编写一个bash脚本来为每个服务器创建文件。
我使用的命令是:
{{1}}
但它似乎不起作用。
答案 0 :(得分:0)
以下代码适合您:
cat <<EOL | ssh $1@$2 'cat > /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh'
broker.id=$3
listeners=$4
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connection.timeout.ms=6000
delete.topic.enable=true
ssl.client.auth=required
security.inter.broker.protocol=SSL
EOL
第一个cat
命令从here document获取其输入(由shell提供,扩展位置参数$3
和$4
)并将其输出通过管道输入ssh
命令。
cat > /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh
命令是单引号,因为它应该全部解析为ssh
命令的单个参数。如果未引用,则只将cat
命令本身传递给ssh
命令,并且shell将解析>
作为重定向{{1}的输出的指令命令到本地文件。此ssh
命令在远程服务器上运行,并从cat
连接获取其输入(如果未将文件名指定为ssh
命令的操作数,则使用标准输入)
上面的命令实际上是useless use of cat,但我认为shell脚本新手可能更容易遵循。实际上,您可以通过直接从here文档重定向cat
命令的输入来缩短第一行:
ssh
这适用于Bash和其他POSIX(符合标准的)shell。