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脚本所要做的那样”或“不,这需要相当多的修改” 如果这是相当可行的,一个粗略的步骤,我需要采取的纲要来完成它 这是可行

我有一个有点复杂的部署过程,我想编写脚本。我不确定这有多容易或难。以下是需要发生的事情:

  • 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文件夹中的文件拥有适当的权限,并且其他人不太可能使用您的帐户登录,则风险会大大降低。如果这些假设不成立,那么你对脚本另一个帐户的想法可能是实现目标的最简单途径。