【问题标题】:Create a file on remote server using ssh使用 ssh 在远程服务器上创建文件
【发布时间】:2016-03-07 13:40:21
【问题描述】:

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

我使用的命令是:

`ssh $1@$2 > /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh <<EOL
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`

但它似乎不起作用。

【问题讨论】:

  • 作为替代方案,请考虑在您的机器上创建一个文件并使用scp myfile username@remotehost:/the/place/to/copy 将其复制到远程主机
  • 是的,我想到了那个选项,但想知道为什么这不起作用。实际上它是一个用于启动程序的属性文件,所以不想一直更改它然后 scp 它
  • 回显“东西” | ssh user@host "cat - >> 文件"
  • 您是否在脚本中的某处使用了您的 sn-p?您是否可以免密码访问您的远程主机(即id_rsa.pub 复制到远程服务器)。否则你可能需要在远程主机上授权,这可能就是你的原因
  • selyunin ,是的,我有 id_rsa.pub。实际上所有虚拟机都在云空间中,因此配置已完成

标签: ssh ubuntu-14.04


【解决方案1】:

以下代码应该适合您:

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(由扩展位置参数$3$4 的shell 提供)获取其输入,并将其输出通过管道传送到ssh 命令。

cat &gt; /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh 命令是单引号的,因为它应该被解析为ssh 命令的单个参数。如果它没有被引用,那么只有cat 命令本身会被传递给ssh 命令,并且shell 会将&gt; 解析为将ssh 命令的输出重定向到本地文件的指令。此cat 命令在远程服务器上运行,并从ssh 连接获取其输入(如果文件名未指定为cat 命令的操作数,则它使用标准输入代替)。


上面的命令实际上是一个useless use of cat,但我认为对于shell脚本新手来说可能更容易遵循。实际上,您可以通过直接从此处的文档重定向 ssh 命令的输入来缩短第一行:

ssh $1@$2 'cat > /etc/kafka/kafka_2.11-0.9.0.0/config/test.sh' <<EOL

这适用于 Bash 和其他 POSIX(符合标准)的 shell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2021-09-07
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多