小编San*_*ath的帖子

使用变量的值作为scp,ssh等的密码,而不是每次都提示用户输入

AFAIK,命令sshscp没有/接受密码参数.否则我可以将密码保存在shell变量中,并可能摆脱输入密码提示.如果我在shell脚本中编写scp命令,则会提示用户输入密码.我的脚本中有多个ssh和scp命令,我不希望用户每次都输入密码.我更喜欢在开头的shell变量中保存密码(通过询问密码一次),然后将其用于每个ssh或scp.

我在这个问题中读到了"公钥识别" .它与我正在寻找的解决方案有关吗?

更新
我读了如何在shell脚本中使用ssh命令?为什么在命令行上指定密码是不安全的.使用是否expect也存储密码并且是世界可见的(使用ps aux)?这是使用安全问题expect吗?

进一步说明
为了进一步说清楚,我正在编写这个shell脚本来自动执行代码和数据库备份,执行代码上载,运行必要的数据库查询,从开发人员系统执行LAMP项目的新版本所需的所有操作到远程实时服务器.我的shell脚本将存在于每个开发人员实例中项目的主代码库中.

需求

  • 我希望所有开发人员(可能都是从不同的远程系统工作)知道SSH/FTP密码,只能在运行时输入ssh/ftp密码才能使用shell.我更喜欢密码是ssh/ftp密码

    注意 -我不希望其他不知道SSH密码的开发人员能够使用它(所以我猜公钥验证不起作用,因为它将密码存储在系统中).

  • 我不希望任何命令行解决方案将密码存储在系统的某些日志中,并且可以使用ps aux或其他东西进行全局可见.

开放赏金
从目前为止的所有答案和我对这些解决方案的分析看来,除了公钥认证之外,其他所有其他都是不安全的.我还不确定使用expect是不安全的.我认为这对我来说是正确的解决方案.在这种情况下,我在尝试执行此操作时遇到命令未找到错误,因为已经对其中一个答案进行了评论.

来自http://www.debianadmin.com/sshpass-non-interactive-ssh-password-authentication.html -

首先,sshpass的用户应该意识到ssh只能以交互方式获取密码并不是没有理由的.安全地存储密码几乎是不可能的,sshpass的用户应该考虑ssh的公钥认证是否提供相同的最终用户体验,同时减少麻烦和更安全.

那么,是不是可以通过输入ssh/ftp密码安全地运行多个ssh,scp命令(如果只是在运行时一次?请再次阅读我的需求部分.

此外,任何人都可以解释这个 -

特别是,编写满足程序的人员需要以上的方式传达上述要点.建议使用匿名管道密码,并使用-d选项将管道的读取端传递给sshpass.

这是否意味着什么是可能的?

variables ssh bash shell

11
推荐指数
2
解决办法
4万
查看次数

通用远程数据备份和下载 - 包括InnoDb支持

我想要一个基于PHP的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件.我知道基于Shell的解决方案更适合做这样的事情(在本地系统上运行shell脚本并通过SSH连接到远程系统)但是要求有一个基于PHP的解决方案,其中知道URL和拥有数据库凭据就足够了非技术人员进行备份.PHP脚本可以上载到远程服务器并执行.

以下是我想要的功能: -

  • 至少应该支持InnoDb引擎 - 应该导出外键约束.如果它支持所有其他引擎没有坏处.
  • 应该在所有服务器上工作,存在最大可能的限制(我知道一些限制,如safe_mode启用exec(),system()功能禁用等).我想要一个非常通用的解决方案,保证可以在任何地方工作.

  • 进程应进行密码验证(请求数据库凭据).

现在,我正在分解事物并从基础开始.以下是我对目前的事情的假设以及一些问题: -

  1. 我不知道,如果系统的功能,如exec,system等可以共享主机服务器或不能完全禁止.如果它们被禁用以便它们不能被覆盖,那么这里mysqldump给出的基础解决方案将无法普遍适用.问题 -但是,如果系统功能只能在内部存在的文件上执行,那么解决方案是否可以安全运行?
    safe_modesafe_mode_exec_dir

  2. 我问了一个关于使用PHP执行此操作的安全风险的问题,并且了解在网站空间中永远不应该创建备份文件(我假设,如果是mysqldump基于解决方案,则需要在下载之前首先创建备份文件).因此,解决方案不应该在那里创建备份文件(如果在其他位置创建,则没有问题).
    问题 -但是,共享主机提供商会允许这样做吗?

  3. 我检查了各种通用用户贡献的PHP类,如phpmysqldump等,并没有找到mysqldump使用系统命令进行备份的基于解决方案的用法.他们做类似的事情SHOW CREATE TABLE来获取所有表创建,数据插入查询,然后下载这些东西而不实际将其保存为文件(因此没有安全风险).
    问题 -我是否正确地得出结论,他们在没有mysqldump像第一点的解决方案中给出的那样简单的情况下完成所有这些事情,因为这不是一个通用且安全的解决方案?
    问题 -另外,我读到没有任何好的方法效果很好.我个人只使用这个phpmysqldump,当我尝试使用创建的备份恢复数据库时,它会给我mysql错误.转储文件中的查询与PhpMyAdmin的导出模块创建的查询略有不同.我还检查了一些其他免费用户贡献的PHP类.看起来它们中的大多数都不支持InnoDb支持,因此如果数据库中存在关键约束,则导出中不存在.
    问题 - PhpMyAdmin本身的导出功能,如果单独出现,可能是我的解决方案,我想.有没有人知道像这样的稳定​​库吗?

php shared-hosting database-backups

11
推荐指数
1
解决办法
986
查看次数

由于错误"文件已存在",使用CodeDeploy部署在"安装"步骤失败

这是我在"安装"步骤中遇到的错误 -

File already exists at location /var/cake_1.2.0.6311-beta/app/webroot/../../somefile.php
Run Code Online (Sandbox Code Playgroud)

我无法断定为这种情况带来了什么样的事件.但我记得的是 -

  • 我通过jenkins启动了部署(集成了代码部署插件).部署在"安装"步骤失败,上面粘贴了错误.

    注 - 这是appspec.yml文件的files部分中的第一个文件.

  • 据我所知,我在同一部署组上进行了一些部署,直接通过代码部署(最有可能使用Jenkins在上面步骤中创建的相同S3文件)并且它已成功完成.

    • 然后我有几次失败的部署(故意在各个步骤失败,例如在安装之前退出非零数字).

此后,即使直接通过代码部署,我也无法成功部署.

背景

我检查了这个看似相关的问题并尝试通过删除内部的所有内容/opt/codedeploy-agent/deployment-root/?,如其中一个答案中提到,但是,它导致我的实例中的代码部署已损坏并且通过Jenkins部署开始抛出此错误说来自archive的appspec文件(它是试图找到最后一次成功部署,似乎已被删除)未找到 -

即使直接通过代码部署的相同部署组成功运行,Jenkins也会在ApplicationStop步骤中触发代码部署失败

然后我重新安装了实例上的代码部署,上面提到的步骤就是我之后做的.

更新 - 开放赏金

正如罗德里戈M所回答的那样,到目前为止,从实例上的部署路径中删除这些文件对我来说是有用的,但同样不适用于这个特定文件 -

 File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json
Run Code Online (Sandbox Code Playgroud)

我验证了以下内容 -

  • 在所有实例上从上述位置删除文件后,我进行了新的部署.我发现文件重新出现但仍然抛出了与上面提到的相同的错误,部署失败了.

  • 没有删除,我chmod'ed文件到777.相同的结果.

有趣的是,昨天我收到了多个文件的这个错误,我继续逐个删除它们,因为我发现它们并采用了新的构建.除了这个文件之外,所有其他文件的问题都得到了修复,甚至删除都没有用.我没有线索!

注 - 我现在正在进行的所有部署都是由Jenkins触发的(没有从AWS代码部署触发的直接部署).

以下是/var/log/aws/codedeploy-agent/codedeploy-agent.log包含相关错误堆栈的日志跟踪-

2016-11-10 07:38:12 INFO  [codedeploy-agent(16889)]: Version file found in /opt/codedeploy-agent/.version.
2016-11-10 07:38:12 INFO  [codedeploy-agent(16889)]: [Aws::CodeDeployCommand::Client 200 0.025545 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json\",\"log\":\"\"}"},host_command_identifier:"WyJjb20uYW1hem9uLmFwb2xsby5kZXBsb3ljb250cm9sLmRvbWFpbi5Ib3N0Q29tbWFuZElkZW50aWZpZXIiLHsiZGVwbG95bWVudElkIjoiQ29kZURlcGxveS91cy1lYXN0LTEvUHJvZC9hcm46YXdzOnNkczp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4OmRlcGxveW1lbnQvZC1VOVFPR0RBWUkiLCJob3N0SWQiOiJhcm46YXdzOmVjMjp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4Omluc3RhbmNlL2ktZWNmYzU1YTkiLCJjb21tYW5kTmFtZSI6Ikluc3RhbGwiLCJjb21tYW5kUG9zaXRpb24iOjQsImNvbW1hbmRBdHRlbXB0IjoxfV0=")

2016-11-10 07:38:12 …
Run Code Online (Sandbox Code Playgroud)

deployment amazon-web-services jenkins aws-code-deploy

8
推荐指数
1
解决办法
3254
查看次数

Cron运行但功能不起作用

我有几个PHP文件由cron运行.我使用命令设置了crons-

crontab crontab.txt
Run Code Online (Sandbox Code Playgroud)

在crontab.txt文件中,我写了这样的cron命令: -

#(Updating tutor activities) - every minute
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php
Run Code Online (Sandbox Code Playgroud)

但是没有一个功能正常工作(数据库查询,发送提醒邮件等).手动运行URL有效.

然后我把我的邮件地址放进去MAILTO收邮件.在邮件中,我收到了该页面的整个HTML源代码.邮件的期望是什么?为什么我的功能不起作用?

更新
如果我将我的cron命令更改为

 #(Updating tutor activities) - every minute
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php
Run Code Online (Sandbox Code Playgroud)

仍然没有成功,这来自我的邮件 -

--15:03:01--  http://project/cron/tutor_activities.php
          => `tutor_activities.php'
Resolving project... IP Address
Connecting to test.project|IP Address|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://project./ [following]
--15:03:01--  http://project./
          => `index.html.1'
Resolving project.... IP Address
Connecting to project.|IP Address|:80... …
Run Code Online (Sandbox Code Playgroud)

php cron crontab

6
推荐指数
3
解决办法
4715
查看次数

在没有焦点的情况下替换textarea中的文本

我想替换所选文本(如果没有选择任何内容,则在光标位置后插入新文本).新文本从另一个文本框输入.
我希望能够插入新文本而不先在textarea中单击(聚焦).
含义:首先选择要在textarea中替换的文本,然后在文本框中输入新文本并单击按钮.

<textarea id='text' cols="40" rows="20">
</textarea>

<div id="opt">
    <input id="input" type="text" size="35">
    <input type="button" onclick='pasteIntoInput(document.getElementById("input").value)' value="button"/>    
</div>


function pasteIntoInput(text) { 
  el=document.getElementById("text");
  el.focus();    
  if (typeof el.selectionStart == "number"&& typeof el.selectionEnd == "number") { 
    var val = el.value; 
    var selStart = el.selectionStart;
    el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd);        
    el.selectionEnd = el.selectionStart = selStart + text.length;
  } 
  else if (typeof document.selection != "undefined") {
    var textRange = document.selection.createRange();        
    textRange.text = text;       
    textRange.collapse(false);        
    textRange.select();
  } 
}  
Run Code Online (Sandbox Code Playgroud)

在线示例: 链接文本

html javascript textarea selection

6
推荐指数
1
解决办法
4997
查看次数

如何在没有IDE的情况下在项目中添加/引用.jar文件

我是Java新手(基本上是LAMP开发人员).我得到了这个JAVA API来解析.pst文件并显示所有收件箱消息.

我尝试执行一个给定的.class文件,但它抛出了异常.我需要添加/引用.jarAPI提供的一些文件.

我还没有任何IDE for Java.维基话说

当Java项目需要JAR库运行时,您必须配置项目以在其构建路径中包含库.幸运的是,Eclipse使这个过程变得简单易记.这里使用的构建是Eclipse Java - Ganymede 3.4.0.

那么,我需要做什么配置?或者更好地获得Eclipse IDE?我只有一个.class文件要执行.

我检查了一些其他问题,但无法得到我的答案 - 如何从命令行向android项目添加外部jar库

如何在我自己的Project JAR中包含外部JAR

java jar reference add

6
推荐指数
2
解决办法
2万
查看次数

使用mysql变量来保存逗号分隔值以用于where子句

我必须运行这样的查询(查询1) -

select something from sometable where someId in (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我想为ID部分保留一个变量,就像这样(查询2) -

set @myIds = "1,2,3";
select something from sometable where someId in (@myIds);
Run Code Online (Sandbox Code Playgroud)

但是这不会给出预期的结果(给出一个空的结果集),也没有查询错误.

我检查了如果我将逗号分隔的ID包装在引号内,查询结果为空结果集(查询3) -

select something from sometable where someId in ("1,2,3");
Run Code Online (Sandbox Code Playgroud)

I guess when I am using variable @myIds like I showed above (query 2), it is evaluating to the above query (query 3).

mysql variables where-clause in-clause

6
推荐指数
1
解决办法
1993
查看次数

在通过邮递员请求时,服务器端无法提供http请求中带下划线的标头参数

以下是API调用的curl导出失败 -

curl -X GET \
  'http://endpoint.in/dummy/path?mobile=777777777' \
  -H 'Content-Type: application/json' \
  -H 'auth_token: iubsaicbsaicbasiucbsa'
Run Code Online (Sandbox Code Playgroud)

auth_token从日志中检查,服务器端根本不提供标头参数.

然而,当直接作为命令发出时,相同的卷曲也起作用.我安装了最新的postman版本v6.2.3.此外,当通过其他工具(如Chrome的高级REST客户端)请求时,相同的API端点也可以工作.

以前,我还检查了这个帖子http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

许多服务器(如nginx)都有一个配置,如果设置,则丢弃名称中带下划线的标头.

但是,我无法验证相同,因为我无法确切地知道服务器是如何部署的.它是一个节点应用程序,我们运行此命令来运行应用程序 -

nohup /bin/forever start -o logs/out.log -e logs/err.log app.js
Run Code Online (Sandbox Code Playgroud)

ps -ef | grep node 显示以下内容 -

root      5981     1  0 Jul19 ?        00:00:00 /root/.nvm/v7.2.1/bin/node /usr/lib/node_modules/forever/bin/monitor app.js
root      5991  5981  0 Jul19 ?        00:00:04 /root/.nvm/v7.2.1/bin/node /usr/local/another/path/to/app.js
Run Code Online (Sandbox Code Playgroud)

更新

这也通过Jmeter干扰了我们的自动化测试.

更新

我们在服务器上运行nginx,它似乎在调用节点进程.我们观察到在服务器上工作正常,nginx配置文件有这个设置 -

underscores_in_headers on;
Run Code Online (Sandbox Code Playgroud)

但是这不存在于服务器的配置文件中.

另一个观察 - 我正在使用最新的邮递员版本 - 6.2.5,问题在那里.然而,当我把相同的邮差收集发送给另一个队友并且他在安装邮差之后点击它时,它对他有效.我仍然不确定问题是与邮递员还是服务器设置有关.

http-headers node.js postman

6
推荐指数
1
解决办法
807
查看次数

获取PHP中最后一个查询的实际(绝对)执行时间(不包括网络延迟等)

我想在我的项目中运行时获得实际的Mysql查询执行时间,因此在microtime()之前和之后运行PHP 并减去将无效.

当我们在命令行中运行查询时,结果显示如下的时序信息: -

xxx rows affected in YY sec
Run Code Online (Sandbox Code Playgroud)

如何使用PHP获取相同的时间信息.我搜索在PHP的MySQL函数在其他SO质疑这里,并在这里却没有得到类似的事情.有没有这样的PHP函数mysql_error(),mysql_affected_rows()它返回其他重要信息?如果不是为什么不存在?有什么理由吗?

有人说 -

我认为获得执行时间的最佳方法是使用一些程序执行函数,如exec()或system().

有没有人有一个可以返回实际执行时间的PHP代码?

php mysql function execution-time

5
推荐指数
1
解决办法
6593
查看次数

git修订版之间删除或修改的文件会自动从实例中删除

背景

我有一个由Jenkins触发的设置,其中包括:

  • 要部署的文件是通过phing,通过与git服务器交谈并git diff在单独的构建服务器之间进行所需的git修订,而不涉及AWS代码部署(据我所知)来准备的.詹金斯触发了phing构建.
  • 我只是将要添加/修改的文件(基于修订版的git差异)动态添加到appspec.yml文件中.我只准备要添加/修改到路径的文件,/home/jenkins/deployment/cd_deploy/codebase//home/jenkins/deployment/cd_deploy/在Jenkins项目的"高级项目选项"下指定了"使用自定义工作区"选项下的路径,该选项基本上是构建服务器中需要上传到的位置S3桶.请注意,我需要从两个git修订版之间删除的实例中删除文件.
  • 然后Jenkins触发AWS Codedeploy,其中包含有关我已配置的应用程序名称,Code部署的部署组的信息.

问题

我动态添加到appspec.yml文件的文件正在EC2实例中进行修改/添加,但是,奇怪的是,要删除的文件也会被删除.我验证了我没有逻辑删除我在appspec文件的beforeInstall钩子中编写的文件.我的beforeInstall挂钩中只有一个beforeInstall.sh文件,没有其他挂钩.一旦我从appspec文件中删除该挂钩,删除就会停止.这是我的appspec文件 -

version: 0.0
os: linux
files:
{Pair of files dynamically generated}
  - source: config/deployment_config.json
    destination: /var/cake_1.2.0.6311-beta/deployment
permissions:
  - object: .
    pattern: "**"
    owner: sandeepan
    group: sandeepan
    mode: 777
    type:
      - file
hooks:
  BeforeInstall:
    - location: beforeInstall.sh
Run Code Online (Sandbox Code Playgroud)

AWS Codedeploy以某种方式与我的git托管(我正在使用gitlab而不是github)进行交谈,并以某种方式获取有关要删除的文件的信息.

更新

我后来观察到,即使从appspec.yml文件中完全删除了钩子部分,并从中央构建服务器(准备好S3捆绑包)中删除了相应的.sh文件,即beforeInstall.sh,afterInstall.sh等,所以我的逻辑和对它的任何引用都没有进入实例,要删除的文件仍然会被自动删除.

更新2

今天我发现在git版本之间修改的文件也会被自动删除. 我有动态准备appspec.yml文件的逻辑.我修改为不添加一些文件.因此,有一些文件存在于git diff中,但在appspec文件中没有.结果,它们被删除但不再出现.似乎代码部署在部署之前自动进行清理.我怎么阻止它?我想添加我的自定义清理逻辑.

更新3

beforeInstall.sh的内容 -

OUTPUT="$(w | grep -Po '(?<=load average: )[^,]*')"
rm -f /var/cake_1.2.0.6311-beta/deployment/deployment_config.json
path="$PWD"
php $path"/deployment-root/"$DEPLOYMENT_GROUP_ID"/"$DEPLOYMENT_ID"/deployment-archive/beforeInstall.php" ${OUTPUT}

/usr/local/nagios/libexec/check_logwarn …
Run Code Online (Sandbox Code Playgroud)

git amazon-web-services jenkins aws-code-deploy

5
推荐指数
1
解决办法
681
查看次数