使用ssh在远程服务器上创建文件

时间:2016-03-07 13:40:21

标签: ssh ubuntu-14.04

我想使用ssh在远程服务器上创建文件,但我无法这样做。我有3个远程服务器,我正在编写一个bash脚本来为每个服务器创建文件。

我使用的命令是:

{{1}}

但它似乎不起作用。

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。