iOS 越狱--OpenSSH连接(登录)手机 和 SSH公钥登录(免密登录)

iOS 越狱--OpenSSH连接(登录)手机 和 SSH公钥登录(免密登录),第1张

OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。 SSH协议可以用来进行远程控制, 或在计算机之间传送文件。

OpenSSH连接(登录)手机

1 在cydia 中安装OpenSSH 包

2 打开手机wifi设置

3 连接wifi

4 读取ip地址

5 打开终端

6 运行命令 ssh root@你的ip

7 输入密码: alpine (可以自定义)

ssh 到你的 iPhone,修改 root/mobile 两个权限下的密码。默认密码是 alpine,使用 passwd 命令修改密码。

修改 root 权限密码

likid$ ssh root@19216818167 // use root role to login

The authenticity of host '19216818167 (19216818167)' can't be established

RSA key fingerprint is SHA256:xxx

Are you sure you want to continue connecting (yes/no) yes

Warning: Permanently added '19216818167' (RSA) to the list of known hosts

root@19216818167's password: // enter original passwordalpine

iPhone:~ root# passwd // change password command

Changing password for root

New password: // enter your new password

Retype new password: // again

iPhone:~ root#exit // logout

logout

Connection to 19216818167 closed

修改 mobile 权限密码

Likid$ ssh mobile@19216818167 //use mobile role to login

mobile@19216818167's password: // enter original passwordalpine

iPhone:~ mobile$ su root

Password:

iPhone:/var/mobile root# cd 

iPhone:~ root# passwd mobile

Changing password for mobile

New password:

Retype new password:

iPhone:~ root#exit

logout

Connection to 19216818167 closed

SSH公钥登录的前提是已经登录过SSH

SSH公钥登录的原理

Mac电脑将自己的公钥发给远程的手机

手机随机生成的一段字符串, 发给Mac电脑

Mac电脑利用私钥加密字符串

手机利用公钥解密字符串

SSH公钥登录步骤:

1 cd  ~/ssh 目录下 (ls 查看当前路径下文件)

Snip20180602_1png

2 ssh-keygen 创建RSA 密钥

ssh-keygen

使用上述命令创建 RSA的公钥和私钥

输入命令之后, 一路回车就可以, 生成下图中两个私钥 id_rsa 和公钥 id_rsapub

生成密钥

3 ssh-copy-id root@1921681102 拷贝密钥到服务器

ssh-copy-id root@1921681102

这里的ip是你手机wifi的ip地址, 会将文件拷贝到 ~/ssh/ 目录下

中间会需要你输入链接服务器(手机)的密码

密码默认是: alpine (在OpenSSH源中可以看到)

5 ssh root@1921681102 登录SSH

ssh root@1921681102

苹果有一个服务,叫usbmuxd,这个服务主要用于在USB协议上实现多路TCP连接

USB 登录需要端口映射,目前有两种方式映射

Python脚本 tcprelay 端口映射:

# 将本地的12345端口映射到设备的TCP端口22# -t 表示能够同时支持多个SSH连接HanDaDaMacBook-Air:~ HanDaDa$python tcprelaypy -t 22:12345

Iproxy端口映射

# 安装libimobiledevice工具 或者usbmuxd

HanDaDaMacBook-Air:~ HanDaDa$brew install libimobiledevice 

或者

HanDaDaMacBook-Air:~ HanDaDa$brew install usbmuxd 

# 映射端口HanDaDaMacBook-Air:~ HanDaDa$iproxy 12345 22

以上两种方式成功后皆可通过以下SSH连接登录手机

# ssh连接本地的端口12345,由于做了端口映射,所以会通过usb连接对面设备的22端口。# 127001 是IP地址# -p 表示端口号HanDaDaMacBook-Air:~HanDaDa$ssh-p12345root@127001

!!!注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面),不一定非要10010端口,只要不是保留端口就行

端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了

新开一个终端界面,SSH登录到Mac本地的12345端口(以下方式2选1)

ssh root@localhost -p 12345

ssh root@127001 -p 12345

localhost是一个域名,指向的IP地址是127001,本机虚拟网卡的IP地址

usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口
也可以用itnl工具来实现端口转发

wangguanxiao-2:~ apple$ itnl --iport 22 --lport 10010

[INFO]Waiting for new TCP connection on port 10010

[INFO]Waiting for device

[INFO]Device connected: a7aee83045805b75336d38faec08a3b73b6d49d1 - Ignoring(non-USB)

[INFO]Device connected: a0370fce4f5755310d2a26b020b989c59d9780aa - Ignoring(non-USB)

[INFO]Device connected: a0370fce4f5755310d2a26b020b989c59d9780aa

>Linux#public key登陆问题
场景
jekins部署出现permission问题
计算机生成了可选文字:[twrkspace] $ / bin/ sh —xe /emp/hudson624B311B77195180436sh channel stopped deploy_1ise-'1020O17 1020 022' war for ip in $deploy_lise' scp / Permission denied, please try again Permission denied, please try again Permission denied (publickey , password) lose connection Build seep 'Execute shell' marked build as failure
原因
ssh服务器的key方式登录对权限要求严格。对于客户端:私钥必须为600权限或者更严格权限(400),一旦其他用户可读,私钥就不起作用(如640),表现为系统认为不存在私钥。
对于服务器端:要求必须公钥其他用户不可写,一旦其他用户可写(如660),就无法用key登录,表现为:Permissiondenied(publickey)。
同时要求ssh目录其他用户不可写,一旦其他用户可写(如770),就无法使用key登录,表现为:Permissiondenied(publickey)。
不仅ssh目录,更上层的目录的权限同样会有影响。
home中用户目录的可写,表示其他用户对ssh子目录也有改写的权限(删除或重命令),也就导致ssh判断ssh为其他用户可写,拒绝使用key登录。
确认Linux系统是32位还是64位
解决
1uname-a
2uname-m
3file/sbin/init
4file/bin/ls
5arch
6getconfLONG_BIT
7getconfWORD_BIT
图示

Windows下有很多SSH工具。在这里用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:ssh IP地址
一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:
ssh 用户名@IP地址 -p 端口号
如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。
每次登录SSH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。
首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。
ssh-keygen
然后将本地公钥添加到服务器中,需要使用另一个命令:
scp -P 端口号 本地文件路径 用户名@远程服务器地址:远程路径
然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。

[TOC]

ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例。有机器A(1921686421),B(1921686422)。
目标:A通过ssh免密码登录到B

特意强调,使用参数可以省去生成公钥/私钥的回车步骤

备注:

第一次登录需输入yes,现在A机可以无密码登录B机了,B登陆A,也同样,在B中生成公钥和私钥对,将公钥写入authorized_keys中,然后同步A、B中的authorized_keys,使其一致就ok了。

也即就是:登录的机子有私钥,被登录的机子要有登录机子的公钥,这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法(不对称加密算法)的公钥/私钥对,当然也可以用dsa(对称加密算法:对应的文件是id_dsa,id_dsapub)

SSH是为建立在应用层和传输层基础上的安全协议( OSI七层与TCP/IP五层网络架构详解 )。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。

从客户端来看,SSH提供两种级别的安全验证:

只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是登录验证流程:

​ 当第一次链接远程主机时,会提示你当前主机的”公钥指纹”,询问你是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/ssh/known_hosts文件中。

这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

1、在客户端打开终端,执行 ssh-keygen ,该命令会默认在 ~/ssh/ 目录下创建 id_rsa 、 id_rsapub 两个文件,分别为你的公钥和私钥

2、将公钥 id_rsapub 文件拷贝到服务器端的 ~/ssh/authorized_keys 文件中,可通过scp拷贝

A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。非对称加密,公钥加密的密文不能公钥解开,只能私钥解开

ssh-agent

ssh-agent是密钥管理器,是一种控制用来保存公钥身份验证所使用的私钥的程序

运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程

ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加
好处1:不用重复输入密码
用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥
假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 Forwarding(转发) 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B;可以在A上直接sftp传文件到B上。

如这边有一台机器是local,能通过公钥直接登陆server1和server2。server1和server2之间无公钥登陆。

现在要在server1上直接登陆server2,在local上执行

执行了之后就将私钥给ssh-agent保管了,server1上面登陆server2的时候,需要私钥验证的时候直接找ssh-agent要就可以了
接下来登陆server1,注意-A

可以发现server1上多了/tmp/ssh-xxxxxxxxx/agentxxxxx的socket,之后神奇的事发生了,在 server1上可直接进server2,只需执行如下命令,如果加了-A则可以继续ssh forwarding(转发) ,以至无限的机器forwarding。
ssh (-A) server2
同样的原理可以试一下sftp, scp等基于ssh的命令。

如运行ssh-add,遇到 Could not open a connection to your authentication agent。

解决: 需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

1 ssh免密码登陆及其原理

SSH(Secure Shell)协议为远程登录或其它网络服务(如:sftp、scp)提供安全保障的一种协议。它设计之初的主要目的是替代telnet远程登录协议,由于telnet协议以明文的方式在互联网上传递数据和服务器账户口令,别有用心的人很容易就可以截获得到这些数据和口令。以下是SSH详细的登录过程:

a、版本号协商阶段

服务器端启动ssh服务,并打开22号端口(也可以配置为其它端口),等待客户端链接。客户端向服务器端发起TCP连接。连接建立后,服务器端和客户端开始商议欲使用的协议版本号。如果协商成功,进入密钥和算法协商阶段,否则,断开TCP连接。

b、密钥和算法协商阶段

服务器端和客户端分别向对方发送算法协商报文,其中包括了自己支持的非对称加密算法列表、加密算法列表、消息验证码算法列表、压缩算法列表等。服务器端和客户端根据双方支持的算法得出最终使用的算法(如非对称加密算法是采用RSA,还是DSA)。协商完成后,服务器端将自己的公钥发送给客户端,客户端根据公钥指纹决定是否信任此主机。选择信任此主机后,客户端使用服务器端的公钥将自己生成的会话密钥加密,发送给服务器端。以后的会话内容和口令都通过此会话密钥加密发送。通常,每过一个小时,服务器端和客户端会重新商定会话密钥,以防止会话密钥被暴力破解。

c、认证阶段

基于口令的认证:

客户端采用在算法协商阶段产生的会话密钥加密帐号、认证方法、口令,并将其传送给服务器端。服务器端收到后将其解密后,基于本地账户密码对其判断是否正确。如果正确,成功建立登录连接,否则,向客户端返回认证失败报文,其中包含了可再次认证的方法列表。当登录请求次数达到可允许的尝试上限次数后,服务器端断开本次TCP连接,并限制此帐号连接请求。

基于密钥的认证:

客户端使用ssh-keygen工具在本地家目录的ssh/目录下生成一对密钥(如:公钥id_rsapub、私钥id_rsa)。并将公钥追加保存到将要登录的服务器上的那个帐号家目录的ssh/authorized_keys文件中。客户端使用算法协商阶段生成的会话密钥加密帐号、认证方法、公钥,并将其传送给服务器端。服务器端收到后将解密后的公钥与本地该帐号家目录下的authorized_keys中的公钥进行对比。如果内容不相同,认证失败,否则服务器端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随记字符串用会话密钥加密发送给服务器端。如果发回的字符串与服务器端起先生成的一样,则认证通过,否则,认证失败。

openssh便是SSH的一个开源实现。本文后续部分将简要介绍如何用openssh基于口令和密钥的远程登录。
示例:

# ssh root@17229166218

如果是第一次登录远端主机,系统会出现以下提示:

因为协议本身无法确认远端服务器的真实性,用户自行根据提供的经SHA256算法提取的公钥指纹判断其真实性。如果确认为真,则输入帐号密码以登录服务器端。
a、首先在客户端生成一对密钥

示例:

b、将客户端公钥保存到服务器端

示例:

另外,可以不使用ssh-copy-id命令,改用以下命令,可以更好的理解公钥的保存过程:

c、登录验证

如果仍然无法无口令登录,请检查sshd配置文件/etc/ssh/sshd_config,并将以下几行前面的注释符号取消。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13418706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-01
下一篇 2023-08-01

发表评论

登录后才能评论

评论列表(0条)

保存