我尝试使用 Android NDK 编译 OpenSSH,但失败了。
我的尝试包括以下步骤:
交叉编译 Android 版 OpenSSL 并安装头文件/库/home/me/arm
从这里获取 OpenSSH 6.2p1
提取存档并运行./configure:
./configure --prefix=/home/me/arm \
--host=arm-linux-androideabi \
--with-ssl-dir=/home/me/arm
...这导致了以下错误:
getrrsetbyname.c:166:2: 错误:未知类型名称“HEADER”
修改./configure命令以包括:
ac_cv_search_getrrsetbyname=是
...这解决了一个问题,但仍然因另一个错误而中止:
/usr/include/linux/un.h:17:8:错误:重新定义“struct sockaddr_un”
再次修改./configure命令以包括:
ac_cv_header_sys_un_h=是
...这让我更进一步,但仍然因错误而中止:
channels.c:在函数“channel_prepare_select”中: Channels.c:2143:2:警告:函数“howmany”的隐式声明 [-W隐式函数声明] channels.c:2145:45:错误:'fd_mask'未声明(在此函数中首次使用)
现在我被困住了。我已经破解了 Androidsys/select.h并发现它fd_mask没有在任何地方定义。我也无法找到./configure解决此问题的选项。还有howmany()未定义的问题。
我需要进行哪些更改才能编译程序?
编辑:我现在已经取得了一些进展。我添加了以下行来./configure解决“未定义fd_mask”错误:
--with-cflags=-Dfd_mask=int
然后我收到以下错误:
错误:“struct passwd”没有名为“pw_gecos”的成员
Android的passwdstruct没有成员pw_gecos。如果不为源代码创建实际的补丁,就不可能纠正这个问题。补丁在这里。
我现在遇到以下错误:
dns.c:在函数“dns_result_totext”中: dns.c:56:7: 错误:'ERRSET_SUCCESS' …
我使用以下命令给 sshd 进程赋予最高优先级:
nice -n -20 /sbin/sshd
Run Code Online (Sandbox Code Playgroud)
但默认情况下它也会给子进程(/bin/sh)最高优先级。那么,是否可以为子进程赋予普通优先级(0)而不是最高优先级?
我正在使用 linux ( mint mate 17.2 ),当通过 ssh 推送到 github 时,有时连接失败,通常在重新启动计算机和网络后恢复。几天后,它可能会再次变坏,相当混乱。
通过http推送从来没有这样的问题,但它需要密码,不方便。
通过 ssh 推送时:
debug1:连接到 github.com [192.30.252.129] 端口 22。
它卡在上面的行。
然后经过漫长的等待,得到超时提示:
debug1:连接到地址 192.30.252.129 端口 22:连接超时
ssh:连接到主机 github.com 端口 22:连接超时
致命:无法从远程存储库读取。
可能是什么原因,如何解决?
平是好的:
eric@eric-pc:~$ ping 192.30.252.129
PING 192.30.252.129 (192.30.252.129) 56(84) bytes of data.
64 bytes from 192.30.252.129: icmp_seq=1 ttl=50 time=345 ms
64 bytes from 192.30.252.129: icmp_seq=2 ttl=50 time=452 ms
64 bytes from 192.30.252.129: icmp_seq=3 ttl=50 time=373 ms
64 bytes from 192.30.252.129: icmp_seq=4 ttl=50 time=349 ms
64 …Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为“paramiko”的 python SSH 库。它的使用方式如下:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user_name, password=password)
chan = ssh_pool[host].get_transport().open_session()
chan.exec_command(SOME_COMMAND)
Run Code Online (Sandbox Code Playgroud)
因为我需要在sudo中执行一些命令,所以我需要在exec_command之前调用chan.get_pty()以确保有可用的 tty 。
我发现在调用 get_pty() 后,标准输出从远程服务器返回,使用 \r\n 作为换行符而不是 \n。
例如:
>>> chan = ssh.get_transport().open_session()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\n'
Run Code Online (Sandbox Code Playgroud)
调用 get_pty() 后:
>>> chan = ssh.get_transport().open_session()
>>> chan.get_pty()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\r\n'
Run Code Online (Sandbox Code Playgroud)
我做了一些网络搜索,但找不到任何连接到pty / tty / newline / \r\n 的内容
我担心什么会导致这种变化。
为什么 paramiko 返回 \r\n 作为换行符而不是 \n?
我正在构建一个应用程序,它通过 SSH 连接到 Cisco 设备以收集show命令的输出。我正在 python 中使用 paramiko 模块来完成此任务。
在将命令输出与 的输出进行比较时plink,发现 paramiko 的输出被截断了。尝试使用非缓冲和增加缓冲区大小,但没有帮助。后来尝试使用window_size参数,似乎有效。
下面是我的代码:
import paramiko
sshclient = None
try:
sshclient = paramiko.SSHClient()
sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect('mydevice', username='admin', password='admin12345')
chan = sshclient.get_transport().open_session(window_size=500000)
chan.settimeout(10800)
chan.exec_command('show tech-support fcip')
value = chan.recv(1024)
while value:
print(value)
value = chan.recv(1024)
finally:
if sshclient:
sshclient.close()
Run Code Online (Sandbox Code Playgroud)
根据 paramiko运输文件,default_window_size=2097152;1597152 小于default_value。
部分日志输出也是default_window_size=2097152:
Authentication (password) successful!
[chan 0] Max packet in: 32768 bytes
[chan 0] Max packet out: 32768 bytes …Run Code Online (Sandbox Code Playgroud) 我有一个运行 docker 实例和默认 docker-machine 虚拟机的远程 Windows 主机。当我通过 SSH 连接到主机并尝试运行任何 docker-machine 命令时,即
> eval $(docker-machine env default --shell bash)
Run Code Online (Sandbox Code Playgroud)
docker-machine 发出“检查 TLS 连接时出错:主机未运行。”
我在 StackOverflow 上搜索,发现其他人重新生成证书并取得成功的案例,所以我尝试了这个,但没有成功。我重新启动了 docker-machine 虚拟机,但还是没有成功。
如果 docker-machine 命令在本地运行而不是通过 ssh,我可以很好地使用它们,但我最终需要能够 ssh 进入主机并运行命令。我在 cygwin 上使用 openssh。PATH 设置正确,如果我将 env 命令的输出放入我的.ssh/environment文件中,我什至可以运行 docker 命令,例如docker ps. 我只是无法与 docker-machine 虚拟机交互。
我正在尝试在已安装旧 OpenSSL 版本的 Linux 机器中构建OpenSSH 7.3p1 。
\n\n首先,我已成功编译OpenSSL 1.0.2h并安装在 中/opt/openssh-1.0.2h,而不是/usr旧 OpenSSL 版本所在的位置。
tar xzf openssl-1.0.2h.tar.gz\ncd openssl-1.0.2h\n./config --prefix=/opt/openssl-1.0.2h shared\nmake depend\nmake\nmake test\nmake install\nRun Code Online (Sandbox Code Playgroud)\n\n然后我继续使用 OpenSSH:
\n\ntar xzf openssh-7.3p1.tar.gz\ncd openssh-7.3p1\n./configure --prefix=/opt/openssh-7.3p1 --with-openssl=/opt/openssl-1.0.2h\nRun Code Online (Sandbox Code Playgroud)\n\n但configure脚本失败并显示以下错误消息:
checking OpenSSL header version... 0090802f (OpenSSL 0.9.8e-rhel5 01 Jul 2008)\nchecking OpenSSL library version... configure: error: OpenSSL >= 0.9.8f required (have "0090802f (OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008)")\nRun Code Online (Sandbox Code Playgroud)\n\n如果我使用,会显示相同的消息--with-ssl-dir=/opt/openssl-1.0.2h/ssl
该工具findssl.sh(位于子目录中contrib)可以正确找到所有 …
使用 git for windows (git-scm.com) 和脚本,我可以让 Bash 停止询问密码,但我似乎无法从 git GUI 中删除密码提示。
远程的 url 正在使用 ssh 链接(见下文),所以我很确定这不是问题。但我不是 git 或 SSH 专家。
git@gitlab.com:repo
Run Code Online (Sandbox Code Playgroud)
已使用提供的密码创建 SSH 密钥 (ED25519),并将公钥添加到托管帐户。SSH 密钥存储在典型位置C:\Users\<user>\.ssh\id_ed25519。Help->Show SSH Key在 GUI 中单击时,它会显示我正在使用的 ssh 密钥。ssh-agent 正在后台运行,并且 ssh 密钥已通过以下设置添加到 ssh-agent。
设置 ssh-agent 我使用了这里提供的代码(复制并粘贴在下面以供参考).bashrc在C:\Users\<user>路径下创建文件。一切似乎都在 bash 提示符下按预期运行,但在 Git GUI 下却没有。
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null …Run Code Online (Sandbox Code Playgroud) 这以前确实有效!
我的管道中的部署步骤是通过 SSH 连接到 DO 框并从 Docker 注册表中提取代码。如前所述,这之前是有效的,这是我当时deploy的一步,从这里.gitlab-ci.yml得到了很好的灵感:Using SSH
deploy:
stage: deploy
image: docker:stable-dind
only:
- master
services:
# Specifying the DinD version here as the latest DinD version introduced a timeout bug
# Highlighted here: https://forum.gitlab.com/t/gitlab-com-ci-stuck-on-docker-build/34401/2
- docker:19.03.5-dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
environment:
name: production
when: manual
before_script:
- mkdir -p ~/.ssh
- echo "$DEPLOYMENT_SERVER_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- eval "$(ssh-agent -S)"
- …Run Code Online (Sandbox Code Playgroud) 我有 4 个容器,配置如下 ( docker-compose.yml):
version: '3'
networks:
my-ntwk:
ipam:
config:
- subnet: 172.20.0.0/24
services:
f-app:
image: f-app
tty: true
container_name: f-app
hostname: f-app.info.my
ports:
- "22:22"
networks:
my-ntwk:
ipv4_address: 172.20.0.5
extra_hosts:
- "f-db.info.my:172.20.0.6"
- "p-app.info.my:172.20.0.7"
- "p-db.info.my:172.20.0.8"
depends_on:
- f-db
- p-app
- p-db
f-db:
image: f-db
tty: true
container_name: f-db
hostname: f-db.info.my
networks:
my-ntwk:
ipv4_address: 172.20.0.6
p-app:
image: p-app
tty: true
container_name: p-app
hostname: p-app.info.my
networks:
my-ntwk:
ipv4_address: 172.20.0.7
p-db:
image: p-db
tty: true
container_name: prod-db
hostname: …Run Code Online (Sandbox Code Playgroud)