ssh--linux--后台运行程序

SSH后台运行与计划任务
本文介绍了如何使用nohup命令使程序在SSH客户端断开后仍能继续运行,以及如何利用crontab进行定时任务的设置。通过具体示例说明了nohup命令的基本用法及crontab的时间格式配置。

最近遇到一种情况,那就是在ssh客户端执行了服务器上的程序后,不小心断电断网了,等再来来电来网时,重新连接 .

执行 ps -ef ,发现原来的程序已经不存在了。伤心啊!跑了两天的数据又要重新跑。我。。我。。

后来牛人们告诉我,可以使用nohup和crontab这两种方式:

第一种方式:

执行命令:

#nohup /usr/show.sh >/dev/null 2>&1 &

明白这句话,就足够我这个开发的使用了。

nohup命令说,固定的

/usr/show.sh是shell脚本的位置,里面当然是shell命令

>/dev/null 2>&1 将标准输出和错误输出重定向到/dev/null中,当然也可以不写,不写会默认到nohup.out文件中

最后面的&千万不要丢啊,这是后台运行的保证

如果重定向了,则出现一个数字,表示shell运行进程号

如果不重定向,则出现appending output to nohup.out表示成功运行了

第二种方式:

使用crontab,使用方式网上一搜一大片,这里我也简单说一句

* * * * * command

*依次代表


0~59 表示分

1~23 表示小时

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

一种是定时,一种是每隔一定时间执行,都可以设置。

说重点,就是crontab -e之后,输入:

30 * * * * /usr/show.sh >/dev/null 2>&1

这句话的意思是,每小时的第30分钟执行以/usr/下的show.sh脚本,并将输出信息重定向到/dev/null中

如果不重定向,则去/var/spool/mail/u查看信息

注意的事情是使用crontab执行的脚本中的内容,路径要详细,环境变量要明确

贴一段:

#!/bin/bash
. /etc/profile
. ~/.bash_profile
source ~/.bashrc;
cd /usr/spider/WebSpider/bin;
for f in `ls ../lib/`;
do
        CLASSPATH=${CLASSPATH}:$f;
done
echo $CLASSPATH
/opt/jdk1.6.0_29/bin/java -classpath $CLASSPATH com.weiboyi.amqp.rabbit.crawl.config.client.App /usr/data/ c 30 1 10000


<think>首先,用户的问题是:“我想查找使用ssh-agent实现免密登录的方法 请问使用ssh-agent实现免密登录的方法”。这是在询问如何使用 ssh-agent 来实现 SSH 免密登录。 我手头有几个引用资料: - 引用[1]:介绍了 SSH 相关命令,包括使用 ssh-keygen 生成密钥,ssh-copy-id 复制公钥实现免密登录。 - 引用[2]:专门讨论了使用 ssh-agent 实现完全免密码登录,解释了 ssh-agent 作为密钥管理器的作用。 - 引用[3]:进一步解释了 ssh-add 配合 ssh-agent 来免密登录多台机器。 - 引用[4]:详细步骤包括 ssh-keygen 和 ssh-copy-id,并提到设置空密码以实现完全免密。 用户明确提到了“使用 ssh-agent 实现免密登录的方法”,所以我应该重点参考引用[2]和引用[3],因为它们直接涉及 ssh-agent。 现在,系统指令: - 所有行内数学表达式必须使用 $...$ 格式。但在这个上下文中,没有数学表达式,所以我不用管这个。 - 独立公式使用 $$...$$ 并单独成段。同样,没有公式。 - LaTeX 语法正确。确保任何数学内容正确格式化。 - 使用中文回答。整个回答都必须是中文。 - 生成相关问题。在回答结束时,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。例如,[^1]。我需要确保在引用信息时添加这些标识。 - 回答结构清晰,逐步解决问题,保证真实可靠。 用户上一次的问题是关于 SSH 免密登录的,引用了这些资料。我的回答需要基于这些引用。 结构化回答: 1. **介绍 ssh-agent 的作用**:简要解释 ssh-agent 是什么,基于引用[2]。 2. **步骤详细说明**:提供使用 ssh-agent 实现免密登录的步骤。整合引用[2]和[3]。 - 启动 ssh-agent。 - 使用 ssh-add 添加私钥。 - 然后 SSH 登录时无需密码。 3. **确保免密登录**:引用中提到设置空密码或使用 ssh-agent 来管理。 4. **附加说明**:如果有其他相关点,比如生成密钥或复制公钥,但我应该聚焦在 ssh-agent。 完整步骤: - 首先生成 SSH 密钥(如果还没有):使用 ssh-keygen,设置空密码以实现完全免密(引用[4])。 - 然后,启动 ssh-agent:使用 eval `ssh-agent` 或类似命令。 - 添加私钥:ssh-add ~/.ssh/id_rsa(或指定密钥路径)。 - 之后,SSH 登录时使用 ssh username@host,ssh-agent 会处理认证。 基于引用[2]:"运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。" 引用[3]:"ssh-add 提示并将用户使用的私钥添加到 ssh-agent 维护列表中,此后当公钥连接到远程 SSH 或 SCP 主机时,不再提示信息。" 所以,步骤是: 1. 启动 ssh-agent:eval $(ssh-agent) 2. 添加私钥:ssh-add ~/.ssh/id_rsa 3. 登录远程主机:ssh user@host 另外,确保密钥已复制到远程主机(使用 ssh-copy-id),但用户可能已经有了这个设置。 在回答中,引用相关部分并添加引用标识。 最后,生成相关问题。 确保回答清晰、逐步。 用中文书写。 </think>以下是基于您提供的引用资料(特别是引用[2]和引用[3]),关于使用 `ssh-agent` 实现 SSH 免密登录的详细方法。`ssh-agent` 是一个密钥管理器,它可以缓存已解密的私钥,从而实现完全免密登录。具体步骤如下(假设您已生成 SSH 密钥对并复制公钥到远程主机;如果没有,我会在步骤中补充说明)。整个过程基于 Linux 环境,使用命令行操作。 ### 第一步:生成 SSH 密钥对(可选,如果尚未生成) 如果您还没有 SSH 密钥对,需要先生成一对公钥和私钥。设置空密码(直接回车两次),以实现完全免密操作(引用[4])。 ```bash # 生成密钥对(推荐使用 ed25519 算法,或 RSA 兼容旧系统) ssh-keygen -t ed25519 -C "your_email@example.com" # 或使用 RSA:ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 按提示保存到默认路径(如 ~/.ssh/id_ed25519),并设置空密码(回车两次) ``` - 公钥路径:`~/.ssh/id_ed25519.pub` - 私钥路径:`~/.ssh/id_ed25519` 完成后,复制公钥到远程主机(使用 `ssh-copy-id` 命令): ```bash ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote-host-ip # 输入远程主机的密码确认复制,后续登录将免密 ``` ### 第二步:启动 `ssh-agent` 并添加私钥 `ssh-agent` 用于管理私钥的缓存。运行后,使用 `ssh-add` 添加私钥。这样,在后续 SSH 连接时,`ssh-agent` 会自动处理认证,无需人工输入密码(引用[2])。 1. **启动 `ssh-agent`**: 在终端运行以下命令,启动 `ssh-agent` 并将其设置为当前会话的环境变量。 ```bash eval "$(ssh-agent -s)" # 输出类似:Agent pid 12345(表示启动成功) ``` - 此命令仅对当前终端会话有效;如需长期生效,可将它添加到 `~/.bashrc` 或 `~/.zshrc` 文件。 2. **添加私钥到 `ssh-agent`**: 使用 `ssh-add` 命令添加您的私钥文件(默认路径为 `~/.ssh/id_rsa` 或 `~/.ssh/id_ed25519`)。 ```bash ssh-add ~/.ssh/id_ed25519 # 替换为您的私钥路径 # 如果私钥有密码,ssh-add 会提示输入一次(但推荐设置空密码以实现完全免密) ``` - 添加成功后,运行 `ssh-add -l` 查看缓存列表,确认私钥已加载(引用[3])。 - **关键点**:`ssh-add` 会将私钥解密并交给 `ssh-agent` 管理,后续所有 SSH 请求都由 `ssh-agent` 自动认证,无需再输入私钥密码或远程主机密码。 ### 第三步:测试免密登录 现在,直接使用 `ssh` 命令连接到远程主机,`ssh-agent` 会自动处理认证过程: ```bash ssh username@remote-host-ip # 如果一切正常,将直接登录,无密码提示 ``` - **工作原理**:`ssh-agent` 在后台运行,当 `ssh` 命令发起连接时,它会提供缓存的私钥信息,配合远程主机上的公钥(已通过 `ssh-copy-id` 复制到 `~/.ssh/authorized_keys`),实现无缝认证(引用[2])。 - **优势**:此方法特别适合在多台机器间漫游,避免重复输入密码(引用[3])。 ### 注意事项 - **会话持久性**:`ssh-agent` 仅对当前终端会话有效。关闭终端后,需重新启动 `ssh-agent` 和 `ssh-add`。如需持久化,可配置系统服务或使用 `systemd`(仅限 Linux)。 - **安全性**:设置空密码虽然方便,但降低了安全性(私钥未加密)。建议在安全环境中使用,或使用密码管理器辅助。 - **多密钥管理**:如果您有多个私钥(如不同主机),可多次运行 `ssh-add` 添加所有密钥:`ssh-add ~/.ssh/key1 ~/.ssh/key2`。 - **引用说明**:以上步骤基于 SSH 代理机制,通过缓存私钥简化认证流程(引用[2][^2]),并支持免密登录多台主机(引用[3][^3])。 如果您在操作中遇到问题(如权限错误),请检查远程主机的 `~/.ssh/authorized_keys` 文件权限(应为 `600`),并确保本地私钥路径正确。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值