Shell脚本编写noob——这个任务的脚本编写能力如何?
我有一个有点复杂的部署过程,我想编写脚本。我不确定这有多容易或难。以下是需要发生的事情:Shell脚本编写noob——这个任务的脚本编写能力如何?,shell,Shell,我有一个有点复杂的部署过程,我想编写脚本。我不确定这有多容易或难。以下是需要发生的事情: sftp myApp.war从我的本地计算机到服务器A 从服务器A到服务器B的sftp myApp.war(可能是ssh连接到服务器A以便在服务器A上运行sftp) 在服务器B上运行jar xvf unab.war 我希望你们中的一位能做到以下几点: 快速回答“是的,这很简单,就像shell脚本所要做的那样”或“不,这需要相当多的修改” 如果这是相当可行的,一个粗略的步骤,我需要采取的纲要来完成它 这是可行
这是可行的,但执行自动化ssh/sftp是棘手的(比以前的rsh/rcp更棘手)这是可行的,但执行自动化ssh/sftp是棘手的(比以前的rsh/rcp更棘手)需要一些技巧。SSH和SCP可以用来做这样的事情,但是您需要配置密钥等。需要一些修改。SSH和SCP可以用来做这样的事情,但是接下来您需要配置密钥等。只需设置无密码身份验证并运行它
scp localfile user@remotehost:location/ # step 1: copy the file
ssh user@remotehost bin/remote_script.sh # step 2: run remote script
只需设置无密码身份验证并运行此
scp localfile user@remotehost:location/ # step 1: copy the file
ssh user@remotehost bin/remote_script.sh # step 2: run remote script
是的,这很简单,而且正是shell脚本的用途
需要注意的是,您需要设置一些SSH身份验证方法,而不需要在控制台中键入密码。(作为我所指内容的快速示例,请参见。)
下面是一个粗略的、未经测试的bash脚本,可以实现您想要的功能:
#!/bin/bash
SERVER_ACCOUNT="username"
SERVER_A="servera.domain.com"
SERVER_B="serverb.domain.com"
TARGET_PATH="/path/to/destination/on/server"
WARFILE="myApp.war"
scp $WARFILE $SERVER_ACCOUNT@$SERVER_A:$TARGET_PATH
ssh $SERVER_A "scp $TARGET_PATH/$WARFILE $SERVER_ACCOUNT@SERVER_B:$TARGET_PATH"
ssh $SERVER_B "jar xvf $TARGET_PATH/$WARFILE"
是的,这很简单,而且正是shell脚本的用途
需要注意的是,您需要设置一些SSH身份验证方法,而不需要在控制台中键入密码。(作为我所指内容的快速示例,请参见。)
下面是一个粗略的、未经测试的bash脚本,可以实现您想要的功能:
#!/bin/bash
SERVER_ACCOUNT="username"
SERVER_A="servera.domain.com"
SERVER_B="serverb.domain.com"
TARGET_PATH="/path/to/destination/on/server"
WARFILE="myApp.war"
scp $WARFILE $SERVER_ACCOUNT@$SERVER_A:$TARGET_PATH
ssh $SERVER_A "scp $TARGET_PATH/$WARFILE $SERVER_ACCOUNT@SERVER_B:$TARGET_PATH"
ssh $SERVER_B "jar xvf $TARGET_PATH/$WARFILE"
如果你不反对某些ruby而不是shell,你可以使用,专门用于此类任务。如果你不反对某些ruby而不是shell,你可以使用,专门用于此类任务。实际上,设置这些键对我来说似乎有点不舒服。据我所知,如果我这样设置,任何访问我的计算机的人也可以不用密码登录这些站点。不可能将密码作为参数传递给脚本吗?也许我可以创建另一个更高安全性的用户,并通过执行su myhighsecurityuser2来创建密钥并运行此脚本:1。只需生成密钥,但不要将它们加载到密钥库中。ssh接受一个参数,告诉它在哪里找到应该用于连接的密钥。2.获取名为sshpass的应用程序。这将要求您的shell脚本具有明文密码。您认为设置无密码身份验证可能存在安全风险是正确的,并且不可能将密码作为参数提供。但是,请注意,在设置授权密钥文件时,默认情况下,它仅适用于生成密钥的用户,因此,如果您对.ssh文件夹中的文件拥有适当的权限,并且其他人不太可能使用您的帐户登录,则风险会大大降低。如果这些假设不成立,那么你对脚本另一个帐户的想法可能是实现你目标的最简单途径。事实上,设置这些键对我来说似乎有点不舒服。据我所知,如果我这样设置,任何访问我的计算机的人也可以不用密码登录这些站点。不可能将密码作为参数传递给脚本吗?也许我可以创建另一个更高安全性的用户,并通过执行su myhighsecurityuser2来创建密钥并运行此脚本:1。只需生成密钥,但不要将它们加载到密钥库中。ssh接受一个参数,告诉它在哪里找到应该用于连接的密钥。2.获取名为sshpass的应用程序。这将要求您的shell脚本具有明文密码。您认为设置无密码身份验证可能存在安全风险是正确的,并且不可能将密码作为参数提供。但是,请注意,在设置授权密钥文件时,默认情况下,它仅适用于生成密钥的用户,因此,如果您对.ssh文件夹中的文件拥有适当的权限,并且其他人不太可能使用您的帐户登录,则风险会大大降低。如果这些假设不成立,那么你对脚本另一个帐户的想法可能是实现目标的最简单途径。