当前位置: 首页 > news >正文

怎么做网站推广图片seo算法

怎么做网站推广图片,seo算法,快速开发平台对比,做网站设计赚钱吗在工作中遇到一段代码,通过SSH_ASKPASS全局变量实现了ssh登录远程IP时的密码输入,chatgpt搜索了一下,其解释大致如下所示: SSH_ASKPASS 是一个环境变量,它在 SSH 客户端需要用户输入密码时起作用。当 SSH 客户端检测到…

在工作中遇到一段代码,通过SSH_ASKPASS全局变量实现了ssh登录远程IP时的密码输入,chatgpt搜索了一下,其解释大致如下所示:

SSH_ASKPASS 是一个环境变量,它在 SSH 客户端需要用户输入密码时起作用。当 SSH 客户端检测到需要密码时,它会首先检查环境变量 SSH_ASKPASS 是否已设置。如果设置了 SSH_ASKPASS,那么 SSH 客户端会调用指定的程序来获取密码,而不是直接在终端中提示用户输入密码。

具体来说,SSH 客户端的工作流程如下:

  1. 客户端发起 SSH 连接请求。
  2. 当服务器需要验证客户端身份时,服务器向客户端发送一个密码提示请求。
  3. 客户端检查 SSH_ASKPASS 环境变量。
  4. 如果 SSH_ASKPASS 已设置,则客户端调用指定的程序来获取密码。
  5. 获取到密码后,客户端将密码传递给 SSH 客户端进行身份验证。
  6. 如果验证成功,SSH 连接建立成功;否则,连接失败。

通过设置 SSH_ASKPASS 环境变量,用户可以自定义一个程序来自动化密码输入过程,从而实现无需人工干预的 SSH 连接过程。这在自动化脚本或程序中特别有用,可以避免需要用户手动输入密码。

不过百度和谷歌却没搜索到人定义的关键信息来确认这点。让chatgpt帮我把ssh源码中的SSH_ASKPASS部分调用代码展示出来,可能理解有问题,每次都答非所问。自己下载了一份ssh源码,简单的用grep SSH_ASKPASS . -rns指令,检索到,应该是如下的代码中实现的调用:

struct notifier_ctx *
notify_start(int force_askpass, const char *fmt, ...)
{va_list args;char *prompt = NULL;pid_t pid = -1;void (*osigchld)(int) = NULL;const char *askpass, *s; struct notifier_ctx *ret = NULL;va_start(args, fmt);xvasprintf(&prompt, fmt, args);va_end(args);if (fflush(NULL) != 0)error_f("fflush: %s", strerror(errno));if (!force_askpass && isatty(STDERR_FILENO)) {writemsg(prompt);goto out_ctx;}if ((askpass = getenv("SSH_ASKPASS")) == NULL)askpass = _PATH_SSH_ASKPASS_DEFAULT;if (*askpass == '\0') {debug3_f("cannot notify: no askpass");goto out;}if (getenv("DISPLAY") == NULL && getenv("WAYLAND_DISPLAY") == NULL &&((s = getenv(SSH_ASKPASS_REQUIRE_ENV)) == NULL ||strcmp(s, "force") != 0)) {debug3_f("cannot notify: no display");goto out;}osigchld = ssh_signal(SIGCHLD, SIG_DFL);if ((pid = fork()) == -1) { error_f("fork: %s", strerror(errno));ssh_signal(SIGCHLD, osigchld);free(prompt);return NULL;}if (pid == 0) {if (stdfd_devnull(1, 1, 0) == -1)fatal_f("stdfd_devnull failed");closefrom(STDERR_FILENO + 1);setenv("SSH_ASKPASS_PROMPT", "none", 1); /* hint to UI */execlp(askpass, askpass, prompt, (char *)NULL);error_f("exec(%s): %s", askpass, strerror(errno));_exit(1);/* NOTREACHED */}out_ctx:if ((ret = calloc(1, sizeof(*ret))) == NULL) {if (pid != -1)kill(pid, SIGTERM);fatal_f("calloc failed");}ret->pid = pid; ret->osigchld = osigchld;out:free(prompt);return ret;
}

其中的关键调用指令就是execlp(askpass, askpass, prompt, (char *)NULL);

参数释义,第一个和第二个都是SSH_ASKPASS文件路径,prompt是提示词,也就是“please enter 192.68.1.10 password:”之类的打印信息,第四个参数无什么含义,不解释。

上面代码execlp调用SSH_ASKPASS后,无任何返回值判定和处理,那密码是怎么实现自动输入到stdin输入的呢?

看源码中,execlp是在fork的子进程中执行的,执行前,其通过stdfd_devnull(1, 1, 0)关闭了子进程的stdout、stderr和stdin的流,再使用closefrom(STDERR_FILENO + 1)关闭了大于STDERR_FILENO的所有流,个人猜测这样可以实现子进程的密码输出流作为ssh密码录入的stdin流。但是chatgpt的解释是关闭后,SSH_ASKPASS中任意print不会输出到任何地方,有点困惑。

所以,如果我们有需求,ssh登录时,期望自动输入密码,可以使用这个功能来自动后台运行,只需要在运行前指定系统的SSH_ASKPASS全局变量即可。下面写一个简单的SSH_ASKPASS功能函数。

#!/usr/bin/python3
import sysif "password" in sys.argv[1]:print("123456")

http://www.khdw.cn/news/60756.html

相关文章:

  • 做测试如何搭建一个网站服务器google chrome官网
  • 南京专业做网站公司seo关键词怎么选
  • 茶叶网站策划方案文案短句干净治愈
  • 如何统计网站pv广州seo报价
  • 网站开发技术与vb国外免费网站域名服务器查询软件
  • 1m带宽做网站怎么样网站收录免费咨询
  • 佛山网站建设定制我想做电商怎么加入
  • 画册设计网站产品50个关键词
  • 贵阳网站建设多钱钱百度软件
  • c# 网站开发框架免费网页空间到哪申请
  • 如何做后台管理员网站seo提高关键词
  • 代做网站多少钱自己建立网站步骤
  • 网站建设与动态网页百度推广要多少钱
  • 企业网站后台源代码黑帽seo优化
  • 网页制作代码复制seo软件排行榜前十名
  • 网站建设中是什么意思惠州网站建设方案推广
  • 网站改版 报价百度推广外包
  • 清城区做模板网站建设百度官方下载安装
  • 网站备案 个人啦啦啦资源视频在线观看8
  • 网站建设 ui 企业网站seo内部优化包括哪些内容
  • 旅游网站优化方案西安网络科技有限公司
  • 买高端品牌网站建设百度推广一天烧多少钱
  • 西宁做腋臭北大网站Y哪个搜索引擎最好
  • 申请的网站怎么建设深圳关键词首页排名
  • 网站建设及推广费记什么科目网站代搭建维护
  • 自己做网站还是公众号互联网推广招聘
  • 网站正在建设中 英文河北seo技术交流
  • 网站域名被重定向网络营销这个专业怎么样
  • php如何做音乐网站手机app免费下载
  • wordpress首页独立标题seo综合排名优化